まず、このような基本的な質問をして本当に申し訳ありませんが、Rails、Ruby、および開発全般に非常に慣れていないため、用語の理解が不足しているため、この質問に対する答えを見つけるのに苦労しています。
以下を使用して車両データの csv をインポートしています。
def self.import(file, category_id)
CSV.foreach(file.path, headers: true) do |row|
Model.where(
:category_id => category_id,
:name => row[1],
:cap_id => row[10]
).first_or_create do |record|
record.layout = row[3],
...数レコード後...
record.manufacturer_id = Manufacturer.where(:name => row[0], :category_id => category_id).id
end
end
end
しかし、ループの最後の行でmanufacturer_idを設定するのに問題があります。ここで私が何をしようとしているのかわかると思いますが、これをどのように書くべきかわかりません。
基本的に、さまざまなカテゴリに属するメーカーのリストがあります (したがって、たとえば、category_id=1 (自動車用) の Ford メーカーと、トラック用の category_id=54 の別の Ford メーカーがあります。
csv から現在の category_id とメーカー名を取得し、それらを相互参照して結果の ID を引き戻すことで、各レコードの manufacturer_id を設定できますか?
上記のコードを試すと、次のエラーが発生します。
NoMethodError in ModelsController#import
undefined method `id' for #<ActiveRecord::Relation::ActiveRecord_Relation_Manufacturer:0x007fcd96f744a8>
Extracted source (around line #33):
32 record.description = row[2],
33 record.manufacturer_id = Manufacturer.where(:name => row[0], :category_id => category_id).id
34 end
35 end
36 end