Merge pull request #425 from skhisma/master
Allow custom IDs to be specified when calling load_resource
This commit is contained in:
commit
610d7e3ec4
|
@ -121,11 +121,15 @@ module CanCan
|
||||||
end
|
end
|
||||||
|
|
||||||
def id_param
|
def id_param
|
||||||
@params[parent? ? :"#{name}_id" : :id]
|
if @options[:id_param]
|
||||||
|
@params[@options[:id_param]]
|
||||||
|
else
|
||||||
|
@params[parent? ? :"#{name}_id" : :id]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def member_action?
|
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
|
end
|
||||||
|
|
||||||
# Returns the class used for this resource. This can be overriden by the :class option.
|
# Returns the class used for this resource. This can be overriden by the :class option.
|
||||||
|
|
|
@ -339,7 +339,15 @@ describe CanCan::ControllerResource do
|
||||||
lambda { resource.load_and_authorize_resource }.should raise_error(CanCan::AccessDenied)
|
lambda { resource.load_and_authorize_resource }.should raise_error(CanCan::AccessDenied)
|
||||||
@controller.instance_variable_get(:@custom_project).should == project
|
@controller.instance_variable_get(:@custom_project).should == project
|
||||||
end
|
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
|
it "should load resource using custom find_by attribute" do
|
||||||
project = Project.create!(:name => "foo")
|
project = Project.create!(:name => "foo")
|
||||||
@params.merge!(:action => "show", :id => "foo")
|
@params.merge!(:action => "show", :id => "foo")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user