如何修改cancan load和授权资源使用不同的id加载资源

How to modify cancan load and authorize resource to load resource using different id

如何修改加载并授权资源使用不同的id加载资源。例如

我的路线是

http://localhost:3000/organization/user/12/event/20/edit

在我的事件控制器中,我使用 :event_id 访问事件,用户使用 :id

现在在我的事件控制器中如何修改 load_and_authorize_resource 使用 :event_id 而不是 :id 来加载事件

资源只有在尚未载入实例变量时才会被载入。这使您可以轻松地覆盖在单独的 before_filter.

中加载的方式。
class EventsController < ApplicationController
  before_filter :find_event
  load_and_authorize_resource

  private

  def find_event
    @event = Event.find(params[:event_id])
  end
end

在文档中阅读更多内容:https://github.com/CanCanCommunity/cancancan/wiki/Authorizing-controller-actions

CanCan 通过 id_param 选项支持这一点:

来自documentation

  # [:+id_param+]
  #   Find using a param key other than :id. For example:
  #
  #   load_resource :id_param => :url # will use find(params[:url])

因此您可以根据自己的情况进行以下操作:

load_and_authorize_resource :id_param => :event_id