[英]Rails cancancan gem with sequenced gem
建築導軌應用程序。 我正在使用cancancan進行授權,使用序列化gem來使用序列號而不是真實ID。 (用於漂亮的URL和更簡單的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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.