0

まず、このような基本的な質問をして本当に申し訳ありませんが、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
4

1 に答える 1