【发布时间】:2013-07-19 09:17:13
【问题描述】:
首先,我很抱歉提出这样一个基本问题,但我对 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
但我无法使用循环的最后一行设置制造商 ID。我想你可以在这里看到我想要做什么,但我不知道应该怎么写。
基本上我有一个属于不同类别的制造商列表(例如,有一个福特制造商的 category_id=1(用于汽车)和另一个福特制造商的 category_id=54 用于卡车。
我可以通过从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
【问题讨论】:
-
“制造商ID设置问题”到底是什么?
-
很抱歉 - 我已添加错误消息。我原以为问题会更明显,只是我糟糕的语法的一个例子。
标签: ruby-on-rails csv import foreign-keys