我正在使用CanCanCan宝石。根据{{3}},你可以定义能力。这对我有用。我想要做的是限制对包含值的记录的访问。类似的东西:
can :crud, Order, :brand == empty?
如果Order表的品牌列为空,则只允许用户查看记录。因为我的例子显然不起作用..你会怎么做?
答案 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查询条件。