【发布时间】:2017-03-30 18:27:02
【问题描述】:
从数据库的角度来看。 例如,我在页面(文章)上有 30 条记录,我想检查是否可以创建“Like”。因此,将对数据库进行 30 次查询来检查此功能。执行此类能力检查的最佳做法是什么?
<% @articles.each do |article| %>
<% if can? :create, Like.new(user: user, article: article) %>
<%= link_to "Like!", like_path(article) %>
<% end %>
<% end %>
更新:添加能力.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user.admin?
can :manage, :all
else
can :create, Like do |like|
!Like.exists?(user: user, article: like.article)
end
end
end
end
【问题讨论】:
-
请出示您的
ability.rb文件 -
我看不出在上面的 sn-p 中哪里会发生数据库查询?有没有其他代码可以做到这一点?
标签: ruby-on-rails ruby postgresql cancancan