Ruby on rails Rails 3:阻止用户对自己的内容进行投票

Ruby on rails Rails 3:阻止用户对自己的内容进行投票,ruby-on-rails,cancan,Ruby On Rails,Cancan,我正在使用Desive和CanCan在我的应用程序中设置身份验证和授权。现在我正在构建一个Like系统,允许用户喜欢/不喜欢给定的模型。阻止用户对自己的内容进行投票的最佳方式是什么 现在,我正在检查控制器中的内容所有者是否等于当前用户,但在我看来,此逻辑应该在能力模型上。我没有使用cancan的经验,但也许您可以像这样使用block: can :like, Product do |product| product.try(:owner) != user end class Ability

我正在使用Desive和CanCan在我的应用程序中设置身份验证和授权。现在我正在构建一个Like系统,允许用户喜欢/不喜欢给定的模型。阻止用户对自己的内容进行投票的最佳方式是什么


现在,我正在检查控制器中的内容所有者是否等于当前用户,但在我看来,此逻辑应该在能力模型上。

我没有使用cancan的经验,但也许您可以像这样使用block:

can :like, Product do |product|
  product.try(:owner) != user
end
class Ability
  include CanCan::Ability

  def initialize(user)
      ...
      can :like, Product, :user_id => user.id
      ...
  end
end

在您的ability.rb中,您需要执行以下操作:

can :like, Product do |product|
  product.try(:owner) != user
end
class Ability
  include CanCan::Ability

  def initialize(user)
      ...
      can :like, Product, :user_id => user.id
      ...
  end
end
然后在控制器中:

@product.like if can? :like, @product
在视图中,您还可以隐藏like按钮:

<% if can? :like, @product%>
  <%= link_to "Like", like_product_path(@product) %>
<% end %>

Igor,我想这就是我的想法。我已经为Like创建了操作,但我不确定如何将其与您示例中的产品结合起来。我现在的能力是:
can:create,Like can:update,Like do | Like | Like.try(:user)==user end