【问题标题】:Rails 3: preventing Users from voting on their own contentRails 3:阻止用户对自己的内容进行投票
【发布时间】:2011-10-19 04:26:28
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails cancan


    【解决方案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 %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      相关资源
      最近更新 更多