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:阻止用户对自己的内容进行投票的主要内容,如果未能解决你的问题,请参考以下文章

在投票前用设计用户登录的rails博客投票系统

Hasura:允许用户不为自己的帖子投票

Django Web开发 投票与评论

阻止用户返回并查看以前提交的表单Rails

如何检查用户是不是已经对投票进行了投票?

Rails 的 Reddit 样式的嵌套/线程/缩进注释?