喜欢/不喜欢Rails中的投票数据库

时间:2010-12-16 02:39:10

标签: ruby-on-rails database associations has-many voting

我正在以YouTube“喜欢”和“不喜欢”的方式为我们的网站创建投票功能,并使用Ruby on Rails 3创建Digg。我无法提出正确的方案。

我有三个模型,用户,主题和投票。每个用户将对一个主题进行一次“赞”或“不喜欢”投票。与这些网站一样,用户可以在主题上投票,但他们也可以创建新主题。我希望不仅能够查看所有用户的投票,还能查看他们创建的主题和他们投票的主题。我正在尝试自己构建它,并决定如何最好地设置数据库来处理这个过程。

我的第一个想法是使用:has_many和belongs_to就像这样......

class User<的ActiveRecord ::基

has_many:votes

has_many:主题

class Topic<的ActiveRecord ::基

has_many:votes

belongs_to:users

class Vote<的ActiveRecord ::基

belongs_to:topics

belongs_to:users

布尔选择#tracks用户选择喜欢还是不喜欢

但很明显,这可能不是最好的方法。我开始认为最好的方法是使用a:has_many:通过关联... ...

class User<的ActiveRecord ::基

has_many:votes,:through => :主题

但我不确定。关于如何最好地设置这样的东西的任何想法?

1 个答案:

答案 0 :(得分:0)

我认为您的初始设置很好,但可以进一步改进以更好地支持您想要完成的任务。也许是这样的:

class User < ActiveRecord::Base
  has_many :votes
  has_many :topics

  #Lists all topics the user has voted on
  has_many :voted_topics, :through => :votes, :source => :topic

  #Lists all votes for the users topics
  has_many :topic_votes, :through => :topics, :source => :votes
end

class Topic < ActiveRecord::Base
  has_many :votes
  belongs_to :user
end

class Vote < ActiveRecord::Base
  belongs_to :topic
  belongs_to :user
end