Ruby on Rails指导Activerecord关联文档不正确?

时间:2012-03-23 06:58:50

标签: ruby-on-rails ruby-on-rails-3 activerecord

哇我一整天都在苦苦挣扎,跟着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

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

1 个答案:

答案 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。