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

时间:2015-04-15 09:20:20

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 cancan cancancan

如何修改加载和授权资源以使用不同的ID加载资源。对于前。

我的路线是

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

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

访问活动

现在在我的事件控制器中,我如何修改load_and_authorize_resource使用:event_id代替:id来加载事件

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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