diff --git a/app/controllers/administrate/application_controller.rb b/app/controllers/administrate/application_controller.rb index 905385fad6..0193d6903b 100644 --- a/app/controllers/administrate/application_controller.rb +++ b/app/controllers/administrate/application_controller.rb @@ -33,7 +33,7 @@ def show end def new - @resource = resource = new_resource.tap do |resource| + @resource = resource = new_resource(new_resource_params).tap do |resource| authorize_resource(resource) end @@ -217,6 +217,14 @@ def apply_collection_includes(relation) relation.includes(*resource_includes) end + def new_resource_params + if params.key?(resource_class.model_name.param_key) + resource_params + else + {} + end + end + def resource_params params.require(resource_class.model_name.param_key) .permit(dashboard.permitted_attributes(action_name)) diff --git a/spec/controllers/admin/blog/posts_controller_spec.rb b/spec/controllers/admin/blog/posts_controller_spec.rb index d628da56a0..d4dfa2971d 100644 --- a/spec/controllers/admin/blog/posts_controller_spec.rb +++ b/spec/controllers/admin/blog/posts_controller_spec.rb @@ -44,6 +44,14 @@ expect(locals[:page]).to be_instance_of(Administrate::Page::Form) end + + it "prefills the new namespaced resource from params" do + locals = capture_view_locals do + get :new, params: {blog_post: {title: "Hello"}} + end + + expect(locals[:page].resource.title).to eq("Hello") + end end describe "GET edit" do diff --git a/spec/controllers/admin/customers_controller_spec.rb b/spec/controllers/admin/customers_controller_spec.rb index 032efd3169..7104f1e7fd 100644 --- a/spec/controllers/admin/customers_controller_spec.rb +++ b/spec/controllers/admin/customers_controller_spec.rb @@ -104,6 +104,24 @@ def default_sorting_direction expect(locals[:page]).to be_instance_of(Administrate::Page::Form) end + + it "builds a new resource without params" do + locals = capture_view_locals { get :new } + + expect(locals[:page].resource).to be_a_new(Customer) + expect(locals[:page].resource.name).to be_nil + end + + it "prefills the new resource from params" do + locals = capture_view_locals do + get :new, params: {customer: {name: "Bob", email: "bob@example.com"}} + end + + resource = locals[:page].resource + expect(resource).to be_a_new(Customer) + expect(resource.name).to eq("Bob") + expect(resource.email).to eq("bob@example.com") + end end describe "GET edit" do