在本次放映中,Ryan Bates展示了如何从头开始实现信誉系统。但有没有办法只给current_user 1次投票,并检查用户是否已经投票支持该应用程序,如果是,则限制投票的可能性?
我认为user.rb中的类似内容应该有效,但我不知道该如何编写
def has_one_vote
Restrict amount of user votes to 1
end
感谢
我假设您有用户、投票和帖子,并且用户对帖子进行投票。
您应该在user_id
属性的Vote
类中添加一个唯一性验证器,其作用域为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