Rails多对多同类双向关系..如何?

时间:2011-01-21 21:20:01

标签: sql ruby-on-rails many-to-many

所以这是交易......我正在编写一个rails应用程序来管理联系人数据..

我有一个联系模式,该联系人需要有很多家庭成员(仍然是联系人类)..这种关系需要相关的关系数据..即

ContactA | ContactB | Relationship
1          2          Contact A is Contact B's Father

如何关联同一类的2个对象并附加一些数据并能够双向遍历关系:

@guy1 = Contact.find(1) #Guy A
@guy1.family_relationships
>>> [[guyb, "f"], [guyc, "s"]]
@guy2 = @guy1.family_members.first
@guy1.family_members
>>> [[guya]]

这可能不是100%正确,但它已经很晚了,而且我一整天都在与服务器作战,所以请原谅我!

我听说你必须做各种各样的hacky SQL才能做到这一点。

谢谢!

丹尼尔

2 个答案:

答案 0 :(得分:2)

我之前的一个项目中有过类似的情况。我选择了以下设计:

class Patient < AR::Base
  has_many :relatives, :dependent => :destroy do
    def husband
      select { |r| r.relation.eql?('Husband').first
    end

    def father
      select { |r| r.relation.eql?('Father').first
    end

    ... 

    def sons
      select { |r| r.relation.eql?('Son')
    end
    ...
  end
end

class Relative < AR::Base
  belongs_to :patient

  validates :relation, 
    :inclusion => { 
      :in => %w( Husband Daughter Son Father Mother Brother Sister )
    }
end

这对我有用。希望这有助于您或至少指出您正确的方向!

答案 1 :(得分:1)

感谢您的回答,但在这里找到答案:

http://railscasts.com/episodes/163-self-referential-association

Railscasts太棒了!