在guides.rubyonrails.org上不正确的自联接模型示例

时间:2012-07-18 19:17:08

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

我觉得http://guides.rubyonrails.org/association_basics.html#self-joins上给出的以下自连模型示例不正确。

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。

2 个答案:

答案 0 :(得分:0)

你是对的。应该是这样的。

然而,在这种情况下,我会使用acts_as_tree或类似的方法来构建层次结构。允许您调用Employee.first.descendants之类的内容来查找为该人工作的所有人。

答案 1 :(得分: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