Vla*_*lad 18 activerecord ruby-on-rails ruby-on-rails-3
哇,我一直是这样挣扎了整整一天,下面就以"官方"红宝石导轨导向的文件,才发现,原来我可能已经通过文件一直误导.我只想确认这是否属实.
如果你去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
Run Code Online (Sandbox Code Playgroud)
现在,我是一个新手,只是相信这段代码(我还能做什么?)并编写了一些代码,这是这种自我连接案例的变体.然而,我看得越多,感觉就越不对劲.不: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
Run Code Online (Sandbox Code Playgroud)
现在它正在发挥作用.我错过了什么吗?或者官方文件是错的?很难相信官方文件会提供不正确的信息,但也许就是这样.
没错,在撰写本文时该指南文档是不正确的。
belongs_to
不需要该选项:foreign_key
,因为 AR 会manager_id
根据协会的名称(“经理”)进行推断。@dwight
如文档所述,当 Employee尝试执行以下操作时,AR 会引发错误,因为 AR 将在 SELECT 语句的 WHERE 条件中@dwight.subordinates
使用。employee_id
根据AR 文档:foreign_key
,将选项传递给has_many
会导致声明在生成 的查询时将使用的 FK @dwight.subordinates
。
归档时间: |
|
查看次数: |
562 次 |
最近记录: |