Я новичок в Rails и пытаюсь создать полиморфные отношения HABTM. Проблема в том, что у меня есть три модели, которые я хочу связать.
Первая - это модель событий, а затем - два типа участников: пользователи и контакты.
Я хочу иметь возможность общаться в качестве участника как пользователи, так и контакты. Итак, в моем коде сейчас есть:
Модель событий
has_and_belongs_to_many :attendees, :polymorphic => true
Модель пользователя
has_and_belongs_to_many :events, :as => :attendees
Модель контактов
has_and_belongs_to_may :events, :as => :attendees
Нет, вы не можете этого сделать, нет такой вещи, как полиморфная ассоциация has_and_belongs_to_many.
Что вы можете сделать, это создать среднюю модель. Вероятно, это будет примерно так:
class Subscription < ActiveRecord::Base
belongs_to :attendee, :polymorphic => true
belongs_to :event
end
class Event < ActiveRecord::Base
has_many :subscriptions
end
class User < ActiveRecord::Base
has_many :subscriptions, :as => :attendee
has_many :events, :through => :subscriptions
end
class Contact < ActiveRecord::Base
has_many :subscriptions, :as => :attendee
has_many :events, :through => :subscriptions
end
Таким образом, модель подписки ведет себя как таблица ссылок в отношении N: N, но позволяет вам иметь полиморфное поведение с событием.