2012-03-23 96 views
18

哇,我一直在为这整整一天挣扎着,在轨道指南文档的“官方”ruby之后,刚发现我可能一直被文档误导。我只想确认这是否属实。Ruby on Rails指导关于Activerecord关联的文档不正确?

如果你去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 

现在它的工作。我错过了什么吗?或者是官方文件错误?很难相信官方文件会提供不正确的信息,但也许情况就是这样。

+2

是的,你说得对。名为'manager'的关联当然会正确地承担外键'manager_id'。然后,“下属”关联将以相同的方式假定无效的foreign_key“subordinate_id”,因此这是需要更改的那个。 – DanneManne 2012-03-23 07:50:47

+6

我发送提交到docrails,修复这个错误 – MikDiet 2012-03-23 10:35:48

+0

我看到如何:foreign_key =>'manager_id'被正确放置。据我所知foreign_key与belongs_to一侧的关系。我希望看到一个例子你称之为“......现在它正在工作”。当然,我可能会错过一些东西。 – Daniel 2012-03-31 17:23:11

回答

1

没错,the guide document在撰写本文时是不正确的。

belongs_to不需要:foreign_key选项,因为AR将根据关联名称(“manager”)推断manager_id。如文档中所述,如果员工@dwight一次尝试@dwight.subordinates,则AR将在错误发生时产生错误,因为AR将在SELECT语句的WHERE条件中使用employee_id

按照AR documentation传递:foreign_key选项has_many导致声明FK产生查询@dwight.subordinates时将被使用。