所以这是交易......我正在编写一个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才能做到这一点。
谢谢!
丹尼尔
答案 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)