哇,我已经在这个问题上挣扎了一整天,遵循了“官方的”ruby on rails指南文档,然后才发现我可能一直被这个文档误导了。我只想确认一下这是不是真的。
如果你去http://guides.rubyonrails.org/association_basics.html和低于2.10。self joins部分写道:
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
现在它起作用了。我是不是遗漏了什么?或者是官方文件错了?很难相信官方文件会提供不正确的信息,但也许事实就是这样。
发布于 2012-04-01 04:08:02
没错,在撰写本文时,the guide document是不正确的。
belongs_to
不需要:foreign_key
选项,因为AR将从关联的名称(“manager_id
”)推断经理。正如文档所述,在给定雇员@dwight
用户尝试@dwight.subordinates
时,AR将引发错误,因为AR将在SELECT语句的WHERE条件中使用employee_id
。
根据AR documentation,将:foreign_key
选项传递给has_many
会导致声明在为@dwight.subordinates
生成查询时将使用的FK。
https://stackoverflow.com/questions/9835239
复制相似问题