Fix NoMethodError
Raises NoMethodError when using ":singleton => true, :shallow => true" and parent_resource is nil
This commit is contained in:
parent
cf263c105d
commit
9a7c427373
|
@ -61,7 +61,11 @@ module CanCan
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_resource
|
def build_resource
|
||||||
resource = resource_base.send(@options[:singleton] ? "build_#{name}" : "new")
|
if @options[:singleton] && resource_base.respond_to?("build_#{name}")
|
||||||
|
resource = resource_base.send("build_#{name}")
|
||||||
|
else
|
||||||
|
resource = resource_base.send("new")
|
||||||
|
end
|
||||||
initial_attributes.each do |name, value|
|
initial_attributes.each do |name, value|
|
||||||
resource.send("#{name}=", value)
|
resource.send("#{name}=", value)
|
||||||
end
|
end
|
||||||
|
@ -74,7 +78,7 @@ module CanCan
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_resource
|
def find_resource
|
||||||
if @options[:singleton]
|
if @options[:singleton] && resource_base.respond_to?(name)
|
||||||
resource_base.send(name)
|
resource_base.send(name)
|
||||||
else
|
else
|
||||||
@options[:find_by] ? resource_base.send("find_by_#{@options[:find_by]}!", id_param) : resource_base.find(id_param)
|
@options[:find_by] ? resource_base.send("find_by_#{@options[:find_by]}!", id_param) : resource_base.find(id_param)
|
||||||
|
|
|
@ -241,6 +241,21 @@ describe CanCan::ControllerResource do
|
||||||
@controller.instance_variable_get(:@project).name.should == "foobar"
|
@controller.instance_variable_get(:@project).name.should == "foobar"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should find record through has_one association with :singleton and :shallow options" do
|
||||||
|
project = Project.create!
|
||||||
|
@params.merge!(:action => "show", :id => project.id)
|
||||||
|
resource = CanCan::ControllerResource.new(@controller, :through => :category, :singleton => true, :shallow => true)
|
||||||
|
resource.load_resource
|
||||||
|
@controller.instance_variable_get(:@project).should == project
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should build record through has_one association with :singleton and :shallow options" do
|
||||||
|
@params.merge!(:action => "create", :project => {:name => "foobar"})
|
||||||
|
resource = CanCan::ControllerResource.new(@controller, :through => :category, :singleton => true, :shallow => true)
|
||||||
|
resource.load_resource
|
||||||
|
@controller.instance_variable_get(:@project).name.should == "foobar"
|
||||||
|
end
|
||||||
|
|
||||||
it "should only authorize :read action on parent resource" do
|
it "should only authorize :read action on parent resource" do
|
||||||
project = Project.create!
|
project = Project.create!
|
||||||
@params.merge!(:action => "new", :project_id => project.id)
|
@params.merge!(:action => "new", :project_id => project.id)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user