我想确保用户无法对帖子发表评论两次。我可以使用模型验证或CanCan来完成此操作。我认为使用CanCan做它会很好,因为我可以做类似以下的事情:
- if can?(:create, Comment)
= render 'comments/form'
然而,在我的能力.rb我有这样的事情,这感觉很奇怪:
can :create, Comment do |comment|
comment.user_id == user.id && !user.comments.exist?(post_id: comment.post_id)
end
答案 0 :(得分:1)
尽管使用cancancan也可以实现这一目标,但出于多种原因,最好使用模型验证来做同样的事情。
user
除外),新角色对发布评论的限制不会相同。你必须再次在ability.rb中编写逻辑,这违反了DRY原则。403
错误,而不是400
错误,在这种情况下会发生错误。