将多态关联与丰富的多对多关联相结合

时间:2011-03-22 19:36:04

标签: ruby-on-rails ruby ruby-on-rails-3 associations polymorphic-associations

现在,我与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 个答案:

答案 0 :(得分:1)

您首先要将voteable_id:integervoteable_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.