rails 5.0.1 ruby 2.4.5にて
下記サイトを参考にcsvファイルの読み込みを実装中です。
rubyのコードについてわからないところがあり解説願いできたら幸いです。
app/model/user.rb
1class User < ApplicationRecord 2 def self.import(file) 3 CSV.foreach(file.path, headers: true) do |row| 4 # IDが見つかれば、レコードを呼び出し、見つかれなければ、新しく作成 5 user = find_by(id: row["id"]) || new 6 # CSVからデータを取得し、設定する 7 user.attributes = row.to_hash.slice(*updatable_attributes) 8 # 保存する 9 user.save 10 end 11 end 12 13 # 更新を許可するカラムを定義 14 def self.updatable_attributes 15 ["id", "name", "age"] 16 end
のimportはクラスメソッドは、であり、Userモデルを操作して、最終的にuserテーブルにデータを保存する役目であることは理解できます。
ruby
1user = find_by(id: row["id"]) || new
にてnil判定を行っているのはわかるのですが、右のnewというオブジェクトは何を意味するのでしょうか?rooやcsvライブラリに実装されているのでしょうか?
ruby
1user.attributes = row.to_hash.slice(*updatable_attributes)
rowはcsvの行で、ハッシュに変換しているとおもうのですが、実際どのようなハッシュになるのでしょうか?(キーは?)
*updatable_attributes
このような、記法はまだみたことがありません。
self.updatable_attributesメソッドをsliceメソッドの引数にしているように見えますが、
不勉強ながら、メソッドを引数に入れるためにはproc? & を用いると聞きかじったことがあります。
上記2点についてお教え願いますでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。