Rails cancancan gem 顺序 gem
Rails cancancan gem with sequenced gem
构建 rails 应用程序。我正在使用 cancancan 进行授权,并使用 sequenced gem 来使用序列号而不是真实 ID。 (对于漂亮的 urls 和更简单的 ID)。现在当 url 是例如
/customers/1
Cancancan 加载 ID=1 的客户,而不是加载 Sequence_Number=1 的客户。如何告诉 cancancan 将 params[:id] 映射到序列号而不是 ID?
使用find_by
选项:
load_resource find_by: :sequence_number
authorize_resource
或覆盖 CanCanCan 的加载:
class ApplicationController
MEMBER_ACTIONS = [:show, :edit, :update, :destroy]
COLLECTION_ACTIONS = [:index, :new, :create]
end
class CustomersController < ApplicationController
before_action :find_customer, only: MEMBER_ACTIONS
load_and_authorize_resource
def find_customer
@customer = Customer.find_by!(sequence_number: params[:id])
end
end
CanCanCan 将查看控制器名称并尝试根据名称加载模型。它将模型加载到具有单数名称的 ivar 中。
MovieDirectorsController -> MovieDirector.find -> @movie_director
如果 ivar 已有值,则跳过 load_resource
。
构建 rails 应用程序。我正在使用 cancancan 进行授权,并使用 sequenced gem 来使用序列号而不是真实 ID。 (对于漂亮的 urls 和更简单的 ID)。现在当 url 是例如
/customers/1
Cancancan 加载 ID=1 的客户,而不是加载 Sequence_Number=1 的客户。如何告诉 cancancan 将 params[:id] 映射到序列号而不是 ID?
使用find_by
选项:
load_resource find_by: :sequence_number
authorize_resource
或覆盖 CanCanCan 的加载:
class ApplicationController
MEMBER_ACTIONS = [:show, :edit, :update, :destroy]
COLLECTION_ACTIONS = [:index, :new, :create]
end
class CustomersController < ApplicationController
before_action :find_customer, only: MEMBER_ACTIONS
load_and_authorize_resource
def find_customer
@customer = Customer.find_by!(sequence_number: params[:id])
end
end
CanCanCan 将查看控制器名称并尝试根据名称加载模型。它将模型加载到具有单数名称的 ivar 中。
MovieDirectorsController -> MovieDirector.find -> @movie_director
如果 ivar 已有值,则跳过 load_resource
。