哇我一整天都在苦苦挣扎,跟着rails指南文件中的“官方”红宝石,刚刚发现我可能一直被文件误导了。我只想确认这是否属实。
如果你转到http://guides.rubyonrails.org/association_basics.html并且在2.10之下。自我加入部分,它说:
class Employee < ActiveRecord::Base
has_many :subordinates, :class_name => "Employee"
belongs_to :manager, :class_name => "Employee",
:foreign_key => "manager_id"
end
现在,我是一个新手并且只相信这段代码(我还能做什么?)并写了一些代码,这是这种自我连接案例的变体。然而,我看得越多,感觉就越不对劲。是:subordinates
不应该有:foreign_key
字段而不是:manager
?无论如何,我刚刚更改了它,以便代码类似于:
class Employee < ActiveRecord::Base
has_many :subordinates, :class_name => "Employee", :foreign_key => "manager_id"
belongs_to :manager, :class_name => "Employee"
end
现在它正在运作。我错过了什么吗?或者官方文件是错的?很难相信官方文件会提供不正确的信息,但也许就是这样。
答案 0 :(得分:1)
没错,the guide document在撰写本文时是不正确的。
belongs_to
不需要:foreign_key
选项,因为AR会从关联名称(“manager”)推断manager_id
。正如文档所述,当一个Employee @dwight
尝试@dwight.subordinates
时,AR会引发错误,因为AR会在SELECT语句的WHERE条件中使用employee_id
。
根据将:foreign_key
选项传递给has_many
的{{3}}会导致声明在为@dwight.subordinates
生成查询时将使用的FK。