提交 4280b20c 编写于 作者: J José Valim

Merge pull request #4494 from Dreamfa11/patch-0

Validates method should not change options argument
...@@ -59,7 +59,7 @@ module ClassMethods ...@@ -59,7 +59,7 @@ module ClassMethods
# #
# validates :name, :'film/title' => true # validates :name, :'film/title' => true
# #
# The validators hash can also handle regular expressions, ranges, # The validators hash can also handle regular expressions, ranges,
# arrays and strings in shortcut form, e.g. # arrays and strings in shortcut form, e.g.
# #
# validates :email, :format => /@/ # validates :email, :format => /@/
...@@ -70,7 +70,7 @@ module ClassMethods ...@@ -70,7 +70,7 @@ module ClassMethods
# validator's initializer as +options[:in]+ while other types including # validator's initializer as +options[:in]+ while other types including
# regular expressions and strings are passed as +options[:with]+ # regular expressions and strings are passed as +options[:with]+
# #
# Finally, the options +:if+, +:unless+, +:on+, +:allow_blank+, +:allow_nil+ and +:strict+ # Finally, the options +:if+, +:unless+, +:on+, +:allow_blank+, +:allow_nil+ and +:strict+
# can be given to one specific validator, as a hash: # can be given to one specific validator, as a hash:
# #
# validates :password, :presence => { :if => :password_required? }, :confirmation => true # validates :password, :presence => { :if => :password_required? }, :confirmation => true
...@@ -80,7 +80,7 @@ module ClassMethods ...@@ -80,7 +80,7 @@ module ClassMethods
# validates :password, :presence => true, :confirmation => true, :if => :password_required? # validates :password, :presence => true, :confirmation => true, :if => :password_required?
# #
def validates(*attributes) def validates(*attributes)
defaults = attributes.extract_options! defaults = attributes.extract_options!.dup
validations = defaults.slice!(*_validates_default_keys) validations = defaults.slice!(*_validates_default_keys)
raise ArgumentError, "You need to supply at least one attribute" if attributes.empty? raise ArgumentError, "You need to supply at least one attribute" if attributes.empty?
...@@ -102,7 +102,7 @@ def validates(*attributes) ...@@ -102,7 +102,7 @@ def validates(*attributes)
end end
# This method is used to define validation that can not be corrected by end user # This method is used to define validation that can not be corrected by end user
# and is considered exceptional. # and is considered exceptional.
# So each validator defined with bang or <tt>:strict</tt> option set to <tt>true</tt> # So each validator defined with bang or <tt>:strict</tt> option set to <tt>true</tt>
# will always raise <tt>ActiveModel::InternalValidationFailed</tt> instead of adding error # will always raise <tt>ActiveModel::InternalValidationFailed</tt> instead of adding error
# when validation fails # when validation fails
......
...@@ -330,4 +330,10 @@ def test_validates_with_bang ...@@ -330,4 +330,10 @@ def test_validates_with_bang
Topic.new.valid? Topic.new.valid?
end end
end end
def test_does_not_modify_options_argument
options = {:presence => true}
Topic.validates :title, options
assert_equal({:presence => true}, options)
end
end end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册