Rails: has_many: through или has_many_and_belongs_to? - PullRequest
4 голосов
/ 23 января 2009

У меня есть приложение, в котором я хочу связать экземпляр модели с другим экземпляром той же модели через другую модель (т.е. Task1> Relationship

По сути, модель отношений будет иметь дополнительную информацию (type_of_relationship, lag), поэтому было бы идеально иметь ее в качестве модели объединения. Тем не менее, нет двух моделей, чтобы присоединиться, только одна ... для себя. Будет ли has_many: через все еще работать? Если так, то как будет выглядеть таблица соединения? В соглашениях Rails у вас будет два столбца с именем Activity_id, которые, очевидно, не будут работать в базе данных.

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

Мой инстинкт говорит пойти с has_many_and_belongs_to и разобраться в правилах моделей, но есть ли лучший способ сделать это? На этом я пойду кругами!

Любая помощь приветствуется.

1 Ответ

8 голосов
/ 23 января 2009

has_many: сквозной вписывается в вашу ситуацию. Я не знаю о специфике вашей модели, но скажем, у вас есть пользователи, и у каждого пользователя могут быть другие пользователи в качестве контактов. Вы можете смоделировать эту ситуацию следующим образом:

class User < ActiveRecord::Base
  has_many :contact_records, :foreign_key => :owner_id
  has_many :contacts, :through => :contact_records, :class_name => "User"
end

class ContactRecord < ActiveRecord::Base
  belongs_to :owner, :class_name => "User"
  belongs_to :user
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...