声誉系统从零开始。限制current_user投票数为1

时间:2012-09-04 13:27:24

标签: ruby-on-rails ruby-on-rails-3 railscasts

this screencast中的

Ryan Bates展示了如何从零开始实施声誉系统。但有没有办法让current_user只有1票,并检查用户是否已经投票申请,如果是,则限制投票的可能性?

我觉得 user.rb 中的这样的东西应该可行,但我不知道怎么写呢

   def has_one_vote
      Restrict amount of user votes to 1
   end

由于

1 个答案:

答案 0 :(得分:1)

我假设您有用户,投票和帖子,并且用户对帖子进行投票。

您应该在Vote属性的user_id类中添加唯一性验证程序,其范围为post_id。这将用户在给定帖子上的投票数限制为一个:

class Vote
  belongs_to :user
  belongs_to :post

  validates :user_id, uniquness: { scope: :post_id }
end

要限制用户永远创建的投票数,请从唯一性验证程序中删除scope,或者(更正确地)移动外键到users表。

就是这样:

class Vote
  belongs_to :user
  belongs_to :post
  validates :user_id, uniquness: true
end

这个:

class User
  belongs_to :vote
end