簡體   English   中英

Rails cancancan寶石與序列化寶石

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM