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

发布于 2024-12-10 10:31:41 字数 151 浏览 1 评论 0原文

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

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

I'm using Devise and CanCan to setup authentication and authorization in my app. Now I'm building a Like system that allows users to like/dislike a given model. What is the best way to prevent users from voting on their own content?

Right now I'm checking in the Controller if the content owner is equal to the current user, but it seems to me that this logic should be on the Ability model.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烟雨扶苏 2024-12-17 10:31:41

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

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

I have no experience in using cancan, but maybe you can use block like this:

can :like, Product do |product|
  product.try(:owner) != user
end
始终不够 2024-12-17 10:31:41

在你的ability.rb中你需要做这样的事情:

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 %>

In your ability.rb you need to do something like this:

class Ability
  include CanCan::Ability

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

and then in the controller:

@product.like if can? :like, @product

also in your view you can then hide the like button:

<% if can? :like, @product%>
  <%= link_to "Like", like_product_path(@product) %>
<% end %>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文