###前提・実現したいこと
has_one
とhas_many
の関係を持つユーザ情報を
CSVファイルのアップロードでDBに反映させたいです。
■リレーション
ruby
1#user.rb 2has_one :section, primary_key: "section_id", foreign_key: 'id' 3has_one :position, primary_key: "position_id", foreign_key: 'id' 4has_one :division, primary_key: "division_id", foreign_key: 'id' 5has_one :department, primary_key: "department_id", foreign_key: 'id' 6has_one :authority, primary_key: "authority_id", foreign_key: 'id' 7 8has_many :user_offices 9has_many :offices, through: :user_offices
CSV
1//インポートするCSVファイルのサンプルです。 2id,section_id,department_id,division_id,position_id,office_ids 31,飲食事業,東京部署,新宿支店,店長,新宿支店;渋谷支店
###発生している問題・エラーメッセージ
■has_one
の関係
id
に変換するのでfind_by
で検索しています。
ruby
1table['section_id'] = Section.find_by(name: table['section_id']).id 2table['department_id'] = Department.find_by(name: table['department_id']).id 3table['division_id'] = Division.find_by(name: table['division_id']).id 4table['position_id'] = Position.find_by(name: table['position_id']).id
しかし、該当するname
がない場合
find_by
の結果がnil
となり、そこで止まってしまいます。
ruby
1undefined method `id' for nil:NilClass
■has_many
の関係
has_one
とあまり変わりませんが、配列を生成しています。
一応、動いてはいますが、他に良い方法がありましたら、助言をしていただきたいです。
ruby
1if table['office_ids'].present? 2 a = table['office_ids'].split(';') 3 table['office_ids'] = [] 4 5 a.each do |b| 6 table['office_ids'] << Office.find_by(name: b).id 7 end 8end
###補足情報(言語/FW/ツール等のバージョンなど)
・Rails (5.1.2)
・参考サイト
has_one
の情報量って少ないですね、、
何卒、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/30 04:13
2017/11/30 06:04
2017/11/30 06:06