2016-02-11 76 views
0

我有“车”表看起来像这样Ruby on Rails的,从另一个表信息插入表

ID | MAKE | MODEL

1 | acura | cl

2 | acura | el

3 | acura | integra

4 | audi | a3

... | ... | ...

,我需要从它使两个表,“做”表中,仅以“使“来自”车辆“表的列信息并将其放入我自己成功创建的”make_name“列中(也使其不能通过uniq方法自行重复)。

id | make_name

1 | acura

2 | audi

3 | bmw

... | ...

第二个表(“make_models”),我已经做了,但有问题获得需要的信息。表看起来像这样

id | make_id | model_name

id | makes id to which current model belongs | model from vehicles table

我试图插入该行轨控制台

@vehicles = Vehicle.all 
@makes = Make.all 
@vehicles.each do |v| 
    MakeModel.create :make_id => @current_make = @makes.where(:make_name => v.make).id, :model_name => v.model 
end 

但得到这个错误消息

NoMethodError: Make Load (1.0ms) SELECT "makes".* FROM "makes" WHERE "makes"."make_name" = ? [["make_name", "ACURA"]] undefined method `id' for #

回答

1

试试这个

MakeModel.create :make_id => @current_make = @makes.where(:make_name => v.make).first.id, :model_name => v.model 
+0

非常感谢! –

2

的问题是,你绑调用id上这里收集的记录:

@makes.where(:make_name => v.make).id 

如果你想找到make_name的第一条记录,使用find_by代替:

@makes.find_by(:make_name => v.make).id 
+0

你也可以做@ makes.where(...)first.id –

+0

。感谢您的答复! :) –