0
建設鐵路應用程序。我正在使用cancancan進行授權,並使用序列號來代替真實ID。 (對於漂亮的網址和簡單的ID)。現在當URL是例如軌道cancancan寶石與序列寶石
/customers/1
Cancancan正在加載ID = 1的客戶,而不是使用Sequence_Number = 1加載客戶。如何告訴cancancan將params [:id]映射到序列號而不是ID?
建設鐵路應用程序。我正在使用cancancan進行授權,並使用序列號來代替真實ID。 (對於漂亮的網址和簡單的ID)。現在當URL是例如軌道cancancan寶石與序列寶石
/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將着眼於控制器名稱並嘗試加載基於名稱的模式。它將模型以單一名稱裝入伊娃。
MovieDirectorsController -> MovieDirector.find -> @movie_director
如果伊娃已經有一個值,則跳過load_resource
。