Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Do not try to call `column_names` on the abstract class.

Normally the table for abstract class won't be existed, so we should not trying to call `#column_names` on it.
  • Loading branch information...
commit 3bed43c6a539638d2d4b3bc3ee7ffe5cca41a320 1 parent 7e6145b
@sikachu sikachu authored
View
2  actionpack/lib/action_controller/metal/params_wrapper.rb
@@ -163,7 +163,7 @@ def _set_wrapper_defaults(options, model=nil)
unless options[:only] || options[:except]
model ||= _default_wrap_model
- if model.respond_to?(:column_names)
+ if !(model.respond_to?(:abstract_class?) && model.abstract_class?) && model.respond_to?(:column_names)
options[:only] = model.column_names
end
end
View
15 actionpack/test/controller/params_wrapper_test.rb
@@ -133,6 +133,7 @@ def test_nested_params
end
def test_derived_wrapped_keys_from_matching_model
+ User.expects(:respond_to?).with(:abstract_class?).returns(false)
User.expects(:respond_to?).with(:column_names).returns(true)
User.expects(:column_names).returns(["username"])
@@ -145,6 +146,7 @@ def test_derived_wrapped_keys_from_matching_model
def test_derived_wrapped_keys_from_specified_model
with_default_wrapper_options do
+ Person.expects(:respond_to?).with(:abstract_class?).returns(false)
Person.expects(:respond_to?).with(:column_names).returns(true)
Person.expects(:column_names).returns(["username"])
@@ -156,6 +158,17 @@ def test_derived_wrapped_keys_from_specified_model
end
end
+ def test_not_wrapping_abstract_model
+ User.expects(:respond_to?).with(:abstract_class?).returns(true)
+ User.expects(:abstract_class?).returns(true)
+
+ with_default_wrapper_options do
+ @request.env['CONTENT_TYPE'] = 'application/json'
+ post :parse, { 'username' => 'sikachu', 'title' => 'Developer' }
+ assert_parameters({ 'username' => 'sikachu', 'title' => 'Developer', 'user' => { 'username' => 'sikachu', 'title' => 'Developer' }})
+ end
+ end
+
private
def with_default_wrapper_options(&block)
@controller.class._wrapper_options = {:format => [:json]}
@@ -246,4 +259,4 @@ def with_default_wrapper_options(&block)
def assert_parameters(expected)
assert_equal expected, Admin::Users::UsersController.last_parameters
end
-end
+end
Please sign in to comment.
Something went wrong with that request. Please try again.