4

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

我的路线是

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

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

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

4

2 回答 2

4

如果资源尚未加载,则资源只会加载到实例变量中。这使您可以轻松地在单独的 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

于 2015-04-15T10:01:13.040 回答
4

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

文档中:

  # [:+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
于 2016-07-12T20:26:33.543 回答