0

我觉得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。

4

2 回答 2

0

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

但是在那种情况下,我会使用acts_as_tree 或类似的东西来构建层次结构。允许您调用诸如Employee.first.descendants查找为该人工作的所有人员之类的事情。

于 2012-07-18T20:07:45.080 回答
0

这个例子是正确的。

“约定优于配置”的口号在这里适用,如果不是,您只需要指定外键是什么"#{name_of_association}_id"

因此belongs_to :manager, :class_name => "Employee"暗示外键是manager_id

但是has_many :subordinates, :class_name => "Employee"假设subordinates_id是孩子的外键,这就是为什么必须定义 if 的原因。has_many 中的定义:foreign_key将针对孩子,并将与当前模型的id.

于 2012-07-18T22:32:02.427 回答