Полиморфные отношения HABTM

Я новичок в 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
  1. Каким должен быть перенос таблицы HABTM? Я немного сбит с толку и не нашел в этом помощи.
  2. Это сработает?
26
задан Makoto 5 December 2014 в 20:26
поделиться

1 ответ

Нет, вы не можете этого сделать, нет такой вещи, как полиморфная ассоциация 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, но позволяет вам иметь полиморфное поведение с событием.

62
ответ дан 28 November 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: