我有2个表情景和 rental_details 。
关系是:
在rental_details表中,我将scenario_id作为列(注意这是数据类型INTEGER而不是FOREIGN_KEY)。
如果我在rails控制台中运行以下命令:
rental_details_1 = RentalDetail.find(123)
rental_details_1.id
=> 123
rental_details.scenario.id
=> 22 #i.e. this is linked to scenario with id = 22
但是,如果我执行以下操作:
scenario_1 = Scenario.find(22)
scenario_1.id
=> 22
scenario_1.rental_details.id
我收到以下错误:
NoMethodError:
的未定义方法`rental_details'你的意思是? rental_detail rental_detail =
如果我将其更改为scenario_1.rental_details.id
,我仍会收到错误。
如果我有这样的一对一关系,我是否可以从方案对象中访问rental_details
表?我认为外键位于“belongs_to”表中,我可以自动从“has_one”表的对象中调用其内容。
(抱歉,我是编码的新手,所以我的术语很可能是错误的。)
答案 0 :(得分:0)
这是预期的行为。
您仍在访问正确的对象 - RentalDetail对象。如果场景has_many RentalDetail,则可以使用复数形式访问它。
答案 1 :(得分:0)
这是惯例:
Scenario has_one RentalDetail
=> scenario_1.rental_detail.id(has_one docs)。它使用RentalDetail的单数形式。
class Scenario < ActiveRecord::Base
has_one :rental_detail
end
Scenario has_many RentalDetail
=&gt; scenario_1.rental_detail s .pluck(:id)(has_many docs)。它使用RentalDetail的复数版本。
class Scenario < ActiveRecord::Base
has_many :rental_details
end
正如我所说,这是对话,但没有人阻止你按照自己的意愿命名关联。您只需要告诉ActiveRecord使用正确的class_name
,primary_key
,foreign_key
等。检查文档。