0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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.* FROM usersWHEREusers.id IS NULL LIMIT 1

パラメータとしては渡っている。。
しかしSELECT users.* FROM usersWHEREusers.id IS 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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?