2012-03-23 95 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時將被使用。