Полиморфные ассоциации Rails, два ассоциированных типа в одном классе

Рассмотрим класс:

class Link < ActiveRecord::Base

  has_many :link_votes, :as => :vote_subject, :class_name => 'Vote'
  has_many :spam_votes, :as => :vote_subject, :class_name => 'Vote'

end

Проблема в том, что когда я добавляю новый голос с @link.link_votes << Vote.new, vote_subject_type это 'Link', а я бы хотел, чтобы это могло быть 'link_votes' или что-то в этом роде. Это ограничение AR или есть способ обойти эту проблему?

На самом деле я нашел один связанный ответ, но не совсем уверен, что в нем говорится: Полиморфная ассоциация с несколькими ассоциациями в одной модели


person snitko    schedule 29.12.2009    source источник


Ответы (1)


Похоже, вы хотите использовать наследование одной таблицы - это позволит вам иметь два разных типа голосов. Это добавит столбец типа в таблицу голосов, к которой вы затем получите доступ как LinkVote или SpamVote.

class SpamVote << Vote
  ...
end

В том же духе.

class Link < ActiveRecord::Base

  has_many :link_votes, :as => :vote_subject
  has_many :spam_votes, :as => :vote_subject

end

В таблице голосов вы увидите такие столбцы, как:

id, type, vote_subject_type, vote_subject_id, etc.

Узнайте больше об ИППП, и я уверен, что вы найдете свой ответ.

person Mark Swardstrom    schedule 29.12.2009