2012-07-18 25 views
0

我覺得http://guides.rubyonrails.org/association_basics.html#self-joins上給出的以下自加入模型示例不正確。guides.rubyonrails.org上的自我加入模型示例不正確

class Employee < ActiveRecord::Base 
    has_many :subordinates, :class_name => "Employee", 
    :foreign_key => "manager_id" 
    belongs_to :manager, :class_name => "Employee" 
end 

我覺得應該如下。你能否建議哪一個是正確的,爲什麼?

class Employee < ActiveRecord::Base 
    has_many :subordinates, :class_name => "Employee", 
    belongs_to :manager, :class_name => "Employee", :foreign_key => "manager_id" 
end 

我的理由:該型號軸承belongs_to關係攜帶它引用到模型中的foreign_key。

回答

0

該示例是正確的。

的「約定優於配置」的口號適用於這裏,你只需要指定什麼,如果它的外鍵是不是"#{name_of_association}_id"

因此belongs_to :manager, :class_name => "Employee"意味着外鍵是manager_id

然而has_many :subordinates, :class_name => "Employee"假設subordinates_id是兒童的外鍵,這就是爲什麼必須定義的原因。 has_many中:foreign_key的定義將針對孩子,並將與當前模型的id加入。

0

你是對的。這是應該的。

但是在那種情況下,我會使用acts_as_tree或類似的方法來構建層次結構。允許您撥打諸如Employee.first.descendants之類的內容來查找所有爲此人工作的人員。