Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

:id_param option to load_resource allows specification of the param n…

…ame to find members
  • Loading branch information...
commit 7937a282a3acb00319492f872706c3f3536acfed 1 parent 600a3e1
@skhisma authored
View
8 lib/cancan/controller_resource.rb
@@ -121,11 +121,15 @@ def authorization_action
end
def id_param
- @params[parent? ? :"#{name}_id" : :id]
+ if @options[:id_param]
+ @params[@options[:id_param]]
+ else
+ @params[parent? ? :"#{name}_id" : :id]
+ end
end
def member_action?
- new_actions.include?(@params[:action].to_sym) || @options[:singleton] || (@params[:id] && !collection_actions.include?(@params[:action].to_sym))
+ new_actions.include?(@params[:action].to_sym) || @options[:singleton] || ( (@params[:id] || @params[@options[:id_param]]) && !collection_actions.include?(@params[:action].to_sym))
end
# Returns the class used for this resource. This can be overriden by the :class option.
View
10 spec/cancan/controller_resource_spec.rb
@@ -327,7 +327,15 @@
lambda { resource.load_and_authorize_resource }.should raise_error(CanCan::AccessDenied)
@controller.instance_variable_get(:@custom_project).should == project
end
-
+
+ it "should load resource using custom ID param" do
+ project = Project.create!
+ @params.merge!(:action => "show", :the_project => project.id)
+ resource = CanCan::ControllerResource.new(@controller, :id_param => :the_project)
+ resource.load_resource
+ @controller.instance_variable_get(:@project).should == project
+ end
+
it "should load resource using custom find_by attribute" do
project = Project.create!(:name => "foo")
@params.merge!(:action => "show", :id => "foo")
Please sign in to comment.
Something went wrong with that request. Please try again.