Ryan Bates展示了如何从零开始实施声誉系统。但有没有办法让current_user只有1票,并检查用户是否已经投票申请,如果是,则限制投票的可能性?
我觉得 user.rb 中的这样的东西应该可行,但我不知道怎么写呢
def has_one_vote
Restrict amount of user votes to 1
end
由于
答案 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