【发布时间】:2011-10-19 04:26:28
【问题描述】:
我正在使用 Devise 和 CanCan 在我的应用程序中设置身份验证和授权。现在我正在构建一个 Like 系统,允许用户喜欢/不喜欢给定的模型。防止用户对自己的内容进行投票的最佳方法是什么?
现在我正在检查控制器是否内容所有者等于当前用户,但在我看来,这个逻辑应该在能力模型上。
【问题讨论】:
标签: ruby-on-rails cancan
我正在使用 Devise 和 CanCan 在我的应用程序中设置身份验证和授权。现在我正在构建一个 Like 系统,允许用户喜欢/不喜欢给定的模型。防止用户对自己的内容进行投票的最佳方法是什么?
现在我正在检查控制器是否内容所有者等于当前用户,但在我看来,这个逻辑应该在能力模型上。
【问题讨论】:
标签: ruby-on-rails cancan
我没有使用cancan的经验,但也许你可以像这样使用block:
can :like, Product do |product|
product.try(:owner) != user
end
【讨论】:
can :create, Like can :update, Like do |like| like.try(:user) == user end
在你的能力.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 %>
【讨论】: