■ CSVのユーザー情報とdbのユーザー情報を突合し、変更点がある場合は更新する
■ CSVに存在しないユーザーは新規に登録する
をしたいと思ってます。
@csv_users = User.create_list_from_csv(params[:file])
で、ファイルからデータを取り出して@csv_usersに代入しました。
その後に↓↓
①@csv_usersにちゃんとデータが入っているかどうかの確認をしたい(validate)
②Userモデルに該当するユーザーが、@csv_usersにいた場合は、更新(update)する
③Userモデルに該当するユーザーが、@csv_usersにいなかった場合は、新規作成(create)する
としたいのですが、
単体だと、User.where(id: csv_user.id ) == nil で条件分岐できると思うのですが
複数人の場合だとどうすればいいのでしょうか??
eachなど使用して、繰り返し処理を行うといいのでしょうか?
ご教授お願いします????????
********************************
csvからデータをインポートした場合、各カラムの情報はparametarではないので、
validate(params[:id])といった形にするのは難しいですよね?
*すでに createアクション、updateアクションで、model/user.rbにvalidateのメソッドを作成していたため、同じものを使いたかったため)
controller
1 def import 2 @csv_users = User.create_list_from_csv(params[:file]) 3 4 @csv_users.each do |csv_users| 5 import_user = User.create!( 6 id: values["id"], 7 name: csv_users.name, 8 age: csv_users.age, 9 ) 10 end 11 redirect_to users_url 12 end
model
1 class << self 2 def create_list_from_csv(file) 3 csv_articles = [] 4 CSV.foreach(file.path, headers: true) do |row| 5 values = row.to_h 6 csv_articles << User.new( 7 id: values["id"], 8 name: values["name"], 9 age: values["age"], 10 ) 11 end 12 csv_articles 13 end
回答2件
あなたの回答
tips
プレビュー