Как мне определить отношения между двумя has_many: через модели? - PullRequest
0 голосов
/ 01 июня 2011

У меня есть 2 модели «пользователи» и «события», и я использовал has_many: through для определения отношения между многими пользователями и событиями.Каждый пользователь может принадлежать 0 или многим событиям, и каждое событие может иметь 0 или много пользователей, связанных с ним.

Я знаю, что когда у меня есть отношения has_many и own_to, я могу просто выполнить user.events.create (arg), и rails знает, что событие связано с данным пользователем.Однако, когда это много ко многим, как их связать?Как мне сказать, что пользователь X теперь принадлежит событию A, а пользователь Y принадлежит событию A, а пользователь X также принадлежит событию B. Тогда, кроме того, как бы я уничтожил это отношение, если бы захотел?

Поскольку нисобытие или пользователь принадлежит только одному пользователю / событию ... как бы я определил отношения после того, как экземпляр пользователя и экземпляр события уже созданы?

Итак ... я думаю, я спрашиваю, если этоработает:

@user = User.create(args)
@event = Event.create(args)
@user.events << @event

это автоматически связывает пользователя с событием, которое я только что добавил к пользователю?Кажется, это работает, но потом, когда я пытаюсь это сделать:

@user2 = User.create(args)
@user2.events << @event

, это, похоже, не связывает @ user2 с этим конкретным событием, но связывает событие с @ user2.Я сделал:

@event.users

и в списке был указан только @user ... но не @ user2.

Ответы [ 2 ]

0 голосов
/ 01 июня 2011

Вот как я это делаю:

class User
  has_many :events, :through => :user_event_associations
  has_many :user_event_associations

class Event
  has_many :users, :through => :user_event_associations
  has_many :user_event_associations


class UserEventAssociation
  belongs_to :user
  belongs_to :event

Если вы сделаете это, вы можете сделать

some_user_object.events << some_event_object

, а затем, если вы перезагрузите some_event_object, вы увидите отношениятам тоже.Обратите внимание, что user_event_associations является таблицей соединений и существует как реальная таблица и модель только с этими двумя строками выше.Я никогда не использую эту таблицу - это скрытая вещь, чтобы поддерживать связь многих со многими.

Что касается поведения уничтожения, вы можете взглянуть на dependent => destroy

0 голосов
/ 01 июня 2011

Проверьте руководство по рельсам на ассоциациях.В частности, раздел 4.3 has_many Ссылка на ассоциацию

Похоже, что метод, который вы ищете, это @ customer.orders << @ order1.В вашем случае с @user и @event вы захотите сделать следующее: </p>

@user.events << @event

и будут созданы правильные ассоциации.

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