NoMethodError:未定义方法`l1'用于#<model

时间:2015-11-15 13:47:45

标签: ruby-on-rails

=“”

我有2个模型,PassengerLocation < 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.savel1.save

我希望p1.l1为我提供完整的数据,包括l1记录,如(Location id: 1, latitude: 1.4

相反,它给了我以下的erorr:

NoMethodError: undefined method `l1' for #<Passenger:0x000000022b96c8>

1 个答案:

答案 0 :(得分:0)

看起来你的foreign_key错了; Rails默认foreign_keysassociation_id id_association,正如您所拥有的那样。)

-

要修复它,您需要显式设置外键(并调用正确的关联对象),或重命名表中的id_location列:

#app/models/passenger.rb
class Passenger < ActiveRecord::Base
   belongs_to :location, foreign_key: :id_location
end

您还应该注意belongs_to关联通话 -

enter image description here

使用ActiveRecord,如果模型中有foreign key,则该模型需要属于另一个模型。使用has_one建议您将外键放在关联的模型中,在这种情况下这是不正确的。

-

最后,您还需要确保使用正确的名称调用关联的对象。

如果您的Passenger belongs_to Location,则需要致电@passenger.location