mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Raise UnknownAttributeError when unknown attributes are supplied via mass assignment
This commit is contained in:
parent
f64bd2ca85
commit
108db00aa9
2 changed files with 17 additions and 1 deletions
|
@ -122,6 +122,10 @@ module ActiveRecord #:nodoc:
|
|||
class MissingAttributeError < NoMethodError
|
||||
end
|
||||
|
||||
# Raised when unknown attributes are supplied via mass assignment.
|
||||
class UnknownAttributeError < NoMethodError
|
||||
end
|
||||
|
||||
# Raised when an error occurred while doing a mass assignment to an attribute through the
|
||||
# <tt>attributes=</tt> method. The exception has an +attribute+ property that is the name of the
|
||||
# offending attribute.
|
||||
|
@ -2400,7 +2404,11 @@ module ActiveRecord #:nodoc:
|
|||
attributes = remove_attributes_protected_from_mass_assignment(attributes) if guard_protected_attributes
|
||||
|
||||
attributes.each do |k, v|
|
||||
k.include?("(") ? multi_parameter_attributes << [ k, v ] : send(k + "=", v)
|
||||
if k.include?("(")
|
||||
multi_parameter_attributes << [ k, v ]
|
||||
else
|
||||
respond_to?(:"#{k}=") ? send(:"#{k}=", v) : raise(UnknownAttributeError, "unknown attribute: #{k}")
|
||||
end
|
||||
end
|
||||
|
||||
assign_multiparameter_attributes(multi_parameter_attributes)
|
||||
|
|
|
@ -904,6 +904,14 @@ class BasicsTest < ActiveRecord::TestCase
|
|||
assert_nil keyboard.id
|
||||
end
|
||||
|
||||
def test_mass_assigning_invalid_attribute
|
||||
firm = Firm.new
|
||||
|
||||
assert_raises(ActiveRecord::UnknownAttributeError) do
|
||||
firm.attributes = { "id" => 5, "type" => "Client", "i_dont_even_exist" => 20 }
|
||||
end
|
||||
end
|
||||
|
||||
def test_mass_assignment_protection_on_defaults
|
||||
firm = Firm.new
|
||||
firm.attributes = { "id" => 5, "type" => "Client" }
|
||||
|
|
Loading…
Reference in a new issue