mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Generate strict validation error messages with attribute name
This commit is contained in:
parent
0b5edb32cf
commit
26861e9506
3 changed files with 19 additions and 11 deletions
|
@ -224,7 +224,7 @@ module ActiveModel
|
|||
def add(attribute, message = nil, options = {})
|
||||
message = normalize_message(attribute, message, options)
|
||||
if options[:strict]
|
||||
raise ActiveModel::StrictValidationFailed, message
|
||||
raise ActiveModel::StrictValidationFailed, full_message(attribute, message)
|
||||
end
|
||||
|
||||
self[attribute] << message
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
require 'active_support/core_ext/hash/slice'
|
||||
|
||||
module ActiveModel
|
||||
|
||||
# == Active Model validates method
|
||||
module Validations
|
||||
module ClassMethods
|
||||
|
@ -101,11 +100,11 @@ module ActiveModel
|
|||
end
|
||||
end
|
||||
|
||||
# This method is used to define validation that can not be corrected by end user
|
||||
# and is considered exceptional.
|
||||
# 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
|
||||
# when validation fails
|
||||
# This method is used to define validation that cannot be corrected by end
|
||||
# user and is considered exceptional. So each validator defined with bang
|
||||
# or <tt>:strict</tt> option set to <tt>true</tt> will always raise
|
||||
# <tt>ActiveModel::StrictValidationFailed</tt> instead of adding error
|
||||
# when validation fails.
|
||||
# See <tt>validates</tt> for more information about validation itself.
|
||||
def validates!(*attributes)
|
||||
options = attributes.extract_options!
|
||||
|
@ -118,7 +117,7 @@ module ActiveModel
|
|||
# When creating custom validators, it might be useful to be able to specify
|
||||
# additional default keys. This can be done by overwriting this method.
|
||||
def _validates_default_keys
|
||||
[ :if, :unless, :on, :allow_blank, :allow_nil , :strict]
|
||||
[:if, :unless, :on, :allow_blank, :allow_nil , :strict]
|
||||
end
|
||||
|
||||
def _parse_validates_options(options) #:nodoc:
|
||||
|
|
|
@ -310,7 +310,7 @@ class ValidationsTest < ActiveModel::TestCase
|
|||
end
|
||||
|
||||
def test_strict_validation_particular_validator
|
||||
Topic.validates :title, :presence => {:strict => true}
|
||||
Topic.validates :title, :presence => { :strict => true }
|
||||
assert_raises ActiveModel::StrictValidationFailed do
|
||||
Topic.new.valid?
|
||||
end
|
||||
|
@ -330,9 +330,18 @@ class ValidationsTest < ActiveModel::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_strict_validation_error_message
|
||||
Topic.validates :title, :strict => true, :presence => true
|
||||
|
||||
exception = assert_raises(ActiveModel::StrictValidationFailed) do
|
||||
Topic.new.valid?
|
||||
end
|
||||
assert_equal "Title can't be blank", exception.message
|
||||
end
|
||||
|
||||
def test_does_not_modify_options_argument
|
||||
options = {:presence => true}
|
||||
options = { :presence => true }
|
||||
Topic.validates :title, options
|
||||
assert_equal({:presence => true}, options)
|
||||
assert_equal({ :presence => true }, options)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue