Ассоциация Rails - несколько модельных способностей

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

 Newsletter Model
  # fields: id, user_id
  has_many :subscriptions
  has_many :users, through: :subscriptions 
  belongs_to :user *i.e. created by a single user*

 Subscription Model
  # fields: user_id, newsletter_id
  belongs_to :newsletter
  belongs_to :user

 User Model
  # fields: id
  has_many :subscriptions
  has_many :newsletters, through: :subscriptions
  has_many :newsletters *i.e. created many newsletters*
  has_many :created_newsletters, :through => :subscriptions, *old answer*
           :source => :newsletter, 
           :conditions => ["newsletter.creator = ?", true]

1 ответ

Решение
Newsletter Model
  has_many :subscriptions
  has_many :subscribers, through: :subscriptions, source: :user 
  belongs_to :creator, class_name: "User", foreign_key: "user_id"

 Subscription Model
  # fields: user_id, newsletter_id
  belongs_to :newsletter
  belongs_to :user

 User Model
  # fields: id
  has_many :subscriptions
  has_many :subscribed_newsletters, through: :subscriptions, source: :newsletter
  has_many :created_newsletters, class_name: "Newsletter", foreign_key: "user_id"

Теперь вы можете получить подписчиков и создателя, выполнив

newsletter.subscribers
newsletter.creator
Другие вопросы по тегам