0
1

More than 3 years have passed since last update.

Rails5 CSV import 一括ユーザー登録

Posted at

Rails5でCSV読み込んで一括ユーザー登録機能作成

CSVの読み込みでちょっとつまずいたのでメモ。
ほんとーに初歩的なミスでした。
基本的にコチラを参考にさせてもらいました。
https://qiita.com/seitarooodayo/items/c9d6955a12ca0b1fd1d4

さて出てきたエラーはコチラ
ActiveRecord::RecordInvalid (Validation failed: Name can't be blank, Password can't be blank, Password can't be blank, Password is too short (minimum is 6 characters)):

よくあるバリデーションに引っかかったやつですね。
blankってことはnilになっちゃってると言うことか。
と言うことはcsvファイルが読み込まれてないのか?

Parameters: {"utf8"=>"✓", "authenticity_token"=>"lzZScpvbb+vbmrJaxYMW3SweQrA0ISM0ssFX9GKIIL1gU6EMWD3IutOb0x5QnaLQwVcW1hUnNMTnZSxTgsHAvw==", "file"=>#<ActionDispatch::Http::UploadedFile:0x00007fe4b41926e8 @tempfile=#<Tempfile:/tmp/RackMultipart20200320-11805-1j4vvvo.csv>, @original_filename="csvimporttest.csv", @content_type="text/csv", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"csvimporttest.csv\"\r\nContent-Type: text/csv\r\n">, "commit"=>"ファイル読み込み登録"}
User Load (0.2ms) SELECT
users.* FROMusersWHEREusers.idIS NULL LIMIT 1

パラメータとしては渡っている。。
しかしSELECTusers.* FROMusersWHEREusers.idIS NULL
なんでだ、、binding.pryしてみよう。

11: def self.import(file)
12: CSV.foreach(file.path, headers: true) do |row|
13: # IDが見つかれば、レコードを呼び出し、見つかれなければ、新しく作成
14: user = find_by(id: row["id"]) || new
15: # CSVからデータを取得し、設定する
16: binding.pry
=> 17: user.attributes = row.to_hash.slice(*updatable_attributes)
18: # 保存する
19: user.save!
20: end
21: end

[1] pry(User)> puts user.attributes
{"id"=>nil, "name"=>nil, "firstchild"=>nil, "secondchild"=>nil, "thirdchild"=>nil, "password_digest"=>nil, "email"=>nil, "admin"=>false, "created_at"=>nil, "updated_at"=>nil}
=> nil
[2] pry(User)> puts user
=> nil
[3] pry(User)> puts row
Id
9
Name
シーエスブイ太郎1
Password
Csvtest1
password_confirmation
Csvtest1

あ、rowには値が入ってる。。
その先に値が渡ってない。
ん?IdとかNameとか大文字入ってるジャン。ひょっとして、、、あーやっぱり。
と言うことでMacbookのnumbersで作成したcsvファイルだったのですがデフォルトで入力値の頭文字が大文字になる仕様でした。。
気づかずそのまま使ってたのが原因でしたね。
初歩的な原因でしたけど、こう言う風に原因追求するのってプログラミングの面白さの一つですよね。
binding.pryはよく使うようにしてます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1