在Rails中设置自引用

时间:2013-12-19 18:10:05

标签: ruby-on-rails self-reference

所以,我有一个用户模型:

class User < ActiveRecord::Base
    has_one :partner, class_name: "User", foreign_key: :id
    belongs_to :inverse_partner, class_name: "User", foreign_key: :id
end

每个用户都有id(由脚手架准备),partner_id表格中的inverse_partner_idusers列。

但是,当我尝试这样做时:

aka[x].partner = shiro[x]

aka[x]shiro[x]都是User,我得到这个奇怪的错误,其中SQL语句表明我设置的是id而不是{{1}我正打算:

partner_id

我显然做错了什么。帮助

1 个答案:

答案 0 :(得分:1)

我看到的唯一需要的更改是在您的关联“foreign_key选项中。

使用当前设置,您基本上使用一个列用于三个不同的目的,即users表的主键,partner关联的外键和inverse_partner关联的外键。因此,当这样做并且您尝试设置伙伴时,可以预期这样的错误。

为每个关系设置适当的外键,如下所示:

class User < ActiveRecord::Base
    has_one :partner, class_name: "User", foreign_key: :partner_id
    belongs_to :inverse_partner, class_name: "User", foreign_key: :inverse_partner_id
end