diff --git a/lib/cancan/inherited_resource.rb b/lib/cancan/inherited_resource.rb index 301724a..098675f 100644 --- a/lib/cancan/inherited_resource.rb +++ b/lib/cancan/inherited_resource.rb @@ -6,13 +6,11 @@ module CanCan @controller.send :association_chain @controller.instance_variable_get("@#{instance_name}") elsif new_actions.include? @params[:action].to_sym - resource = @controller.send :build_resource initial_attributes.each do |attr_name, value| resource.send("#{attr_name}=", value) end resource - else @controller.send :resource end diff --git a/spec/cancan/inherited_resource_spec.rb b/spec/cancan/inherited_resource_spec.rb index dc4cc58..3779fe6 100644 --- a/spec/cancan/inherited_resource_spec.rb +++ b/spec/cancan/inherited_resource_spec.rb @@ -39,4 +39,22 @@ describe CanCan::InheritedResource do CanCan::InheritedResource.new(@controller).load_resource @controller.instance_variable_get(:@projects).should == :projects end + + it "should build a new resource with attributes from current ability" do + @params[:action] = "new" + @ability.can(:create, Project, :name => "from conditions") + stub(@controller).build_resource { Struct.new(:name).new } + resource = CanCan::InheritedResource.new(@controller) + resource.load_resource + @controller.instance_variable_get(:@project).name.should == "from conditions" + end + + it "should override initial attributes with params" do + @params.merge!(:action => "new", :project => {:name => "from params"}) + @ability.can(:create, Project, :name => "from conditions") + stub(@controller).build_resource { Struct.new(:name).new } + resource = CanCan::ControllerResource.new(@controller) + resource.load_resource + @controller.instance_variable_get(:@project).name.should == "from params" + end end