Rails 3:阻止用户对自己的内容进行投票
Posted
技术标签:
【中文标题】Rails 3:阻止用户对自己的内容进行投票【英文标题】:Rails 3: preventing Users from voting on their own content 【发布时间】:2011-10-19 04:26:28 【问题描述】:我正在使用 Devise 和 CanCan 在我的应用程序中设置身份验证和授权。现在我正在构建一个 Like 系统,允许用户喜欢/不喜欢给定的模型。防止用户对自己的内容进行投票的最佳方法是什么?
现在我正在检查控制器是否内容所有者等于当前用户,但在我看来,这个逻辑应该在能力模型上。
【问题讨论】:
【参考方案1】:我没有使用cancan的经验,但也许你可以像这样使用block:
can :like, Product do |product|
product.try(:owner) != user
end
【讨论】:
伊戈尔,我想这就是主意。我有 Like 的 create 操作,但我不确定如何将它与您的示例中的 Product 结合起来。我现在拥有的能力是:can :create, Like can :update, Like do |like| like.try(:user) == user end
【参考方案2】:
在你的能力.rb 中你需要做这样的事情:
class Ability
include CanCan::Ability
def initialize(user)
...
can :like, Product, :user_id => user.id
...
end
end
然后在控制器中:
@product.like if can? :like, @product
在您的视图中,您还可以隐藏点赞按钮:
<% if can? :like, @product%>
<%= link_to "Like", like_product_path(@product) %>
<% end %>
【讨论】:
以上是关于Rails 3:阻止用户对自己的内容进行投票的主要内容,如果未能解决你的问题,请参考以下文章