Объединение полиморфных ассоциаций с богатыми ассоциациями «многие ко многим» - PullRequest
0 голосов
/ 22 марта 2011

Прямо сейчас у меня богатая ассоциация «многие ко многим» с VideoVote как независимой записью.

class VideoVote < ActiveRecord::Base
  belongs_to :user
  belongs_to :video
end

class User < ActiveRecord::Base
  has_many :video_votes
  has_many :voted_videos,
    :through => :video_votes,
    :source => :video
end

class Video < ActiveRecord::Base
  has_many :video_votes
  has_many :voted_users,
    :through => :video_votes,
    :source => :user
end

Однако я хочу преобразовать это в полиморфную ассоциацию, где комментарии также могут иметь много VideoVotes (я понимаю, что это сбивает с толку, поэтому я, вероятно, должен изменить его на Votes). (также к видео будет много комментариев.) Как мне это сделать?

1 Ответ

1 голос
/ 22 марта 2011

Сначала вы хотите добавить voteable_id:integer и voteable_type:string в таблицу video_votes.

Тогда ваши модели будут выглядеть следующим образом:

class VideoVote < ActiveRecord::Base
  belongs_to :voteable, :polymorphic => true


end

class Comment < ActiveRecord::Base
  has_many :video_votes, :as => :voteable
  #code
end

class Video < ActiveRecord::Base
  has_many :video_votes, :as => :voteable
  #code
end

Тогда вы сможете получить к ним доступ, как и к любымдругое has_many:

@video.video_votes
@comment.video_votes
#etc.
...