我有2个模型,Passenger
和Location
< p>
class Location < ActiveRecord::Base
has_many :passengers
end
和
class Passenger < ActiveRecord::Base
has_one :location
end
我在rails console
p1是旅客记录
p1
=> #<Passenger id: 2, name: "Saba", lastname: "las", phone: 1234, created_at: "2015-11-15 13:04:03", updated_at: "2015-11-15 13:04:03", id_location: 1>
和l1是位置记录
l1
=> #<Location id: 1, latitude: 1.4, longitude: 4.5, created_at: "2015-11-15 13:02:00", updated_at: "2015-11-15 13:02:00">
“id_location
”是Passenger
我做了p1.save
和l1.save
。
我希望p1.l1
为我提供完整的数据,包括l1记录,如(Location id: 1, latitude: 1.4
)
相反,它给了我以下的erorr:
NoMethodError: undefined method `l1' for #<Passenger:0x000000022b96c8>
答案 0 :(得分:0)
看起来你的foreign_key
错了; Rails默认foreign_keys
为association_id
(不 id_association
,正如您所拥有的那样。)
-
要修复它,您需要显式设置外键(并调用正确的关联对象),或重命名表中的id_location
列:
#app/models/passenger.rb
class Passenger < ActiveRecord::Base
belongs_to :location, foreign_key: :id_location
end
您还应该注意belongs_to关联通话 -
使用ActiveRecord,如果模型中有foreign key
,则该模型需要属于另一个模型。使用has_one
建议您将外键放在关联的模型中,在这种情况下这是不正确的。
-
最后,您还需要确保使用正确的名称调用关联的对象。
如果您的Passenger belongs_to Location
,则需要致电@passenger.location