Rails:使用CanCanCan功能隐藏元素

时间:2015-12-16 07:02:54

标签: ruby-on-rails cancancan

我正在使用CanCanCan宝石。根据{{​​3}},你可以定义能力。这对我有用。我想要做的是限制对包含值的记录的访问。类似的东西:

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

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

1 个答案:

答案 0 :(得分:1)

这不是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查询条件。