Rails многие-ко-многим однотипные двунаправленные отношения .. как? - PullRequest
1 голос
/ 22 января 2011

Так вот в чем дело ... Я пишу приложение для управления контактными данными.

У меня есть модель контакта, и у этого контакта должно быть много членов семьи (по-прежнему класс контактов) ..эти отношения требуют связанных данных отношений .. т.е.

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% правильно, но уже поздно, и я целый день боролся с сервером, поэтому, пожалуйста, прости меня !!

Я слышал, что для этого нужно использовать все виды хакерских SQL ..

Спасибо!

Даниэль

Ответы [ 2 ]

2 голосов
/ 22 января 2011

У меня была похожая ситуация в одном из моих проектов ранее.Я пошел со следующим дизайном:

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 голос
/ 22 января 2011

Спасибо за отличные ответы, но нашел ответ здесь:

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

Railscasts - это круто!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...