Rails: 使用 CanCanCan 能力隐藏元素

Rails: Using CanCanCan Abilities to hide elements

我正在使用 CanCanCan gem。根据documentation你可以定义能力。那对我有用。我想要做的是限制对包含值的记录的访问。类似于:

can :crud, Order, :brand == empty?

如果订单 table 的品牌列为空,则应仅允许用户查看记录。因为我的例子显然不起作用..你会怎么做?

这不是 CanCanCan 的正确用例 - 在 SQL:

中使用特定查询会更合适
#app/models/order.rb
class Order < ActiveRecord::Base
   scope :no_brand, -> { where(brand: "") }
end

#app/controllers/orders_controller.rb
class OrdersController < ApplicationController
   def index
      @orders = Order.no_brand
   end
end

当然,您可以使用CanCanCan,并且您可以this:

#app/models/ability.rb
class Ability
  include CanCan::Ability

  def initialize(user)
    can :read, Order, brand: ""
  end
end

我不这样做的原因是因为 CanCanCan 是为了 授权 -- 检查用户是否有 permission 做某事.

您的用例最好与 SQL 查询条件一起使用。