Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Namespaced Controllers not building new resource from params(regression 1.6.8) #670

Merged
merged 1 commit into from

2 participants

@andhapp
Collaborator

This code fixes a namespace related regression reported in #664.

@ryanb ryanb merged commit 2db73e6 into ryanb:master
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Jun 29, 2012
  1. @andhapp
This page is out of date. Refresh to see the latest.
View
17 lib/cancan/controller_resource.rb
@@ -213,10 +213,15 @@ def name
def resource_params
if @options[:class]
- @params[@options[:class].to_s.underscore.gsub('/', '_')]
- else
- @params[namespaced_name.to_s.underscore.gsub("/", "_")]
+ params_key = extract_key(@options[:class])
+ return @params[params_key] if @params[params_key]
end
+
+ resource_params_by_namespaced_name
+ end
+
+ def resource_params_by_namespaced_name
+ @params[extract_key(namespaced_name)]
end
def namespace
@@ -244,5 +249,11 @@ def collection_actions
def new_actions
[:new, :create] + [@options[:new]].flatten
end
+
+ private
+
+ def extract_key(value)
+ value.to_s.underscore.gsub('/', '_')
+ end
end
end
View
8 spec/cancan/controller_resource_spec.rb
@@ -75,13 +75,19 @@ class Project < ::Project; end
end
it "should build a new resource for namespaced model with hash if params[:id] is not specified" do
- project = Sub::Project.create!
@params.merge!(:action => "create", 'sub_project' => {:name => "foobar"})
resource = CanCan::ControllerResource.new(@controller, :class => ::Sub::Project)
resource.load_resource
@controller.instance_variable_get(:@project).name.should == "foobar"
end
+ it "should build a new resource for namespaced controller and namespaced model with hash if params[:id] is not specified" do
+ @params.merge!(:controller => "Admin::SubProjectsController", :action => "create", 'sub_project' => {:name => "foobar"})
+ resource = CanCan::ControllerResource.new(@controller, :class => Project)
+ resource.load_resource
+ @controller.instance_variable_get(:@sub_project).name.should == "foobar"
+ end
+
it "should build a new resource with attributes from current ability" do
@params.merge!(:action => "new")
@ability.can(:create, Project, :name => "from conditions")
Something went wrong with that request. Please try again.