提交 2e70f441 编写于 作者: H Henrik Nyh

ActiveRecord/ActiveModel '#validate' alias for 'valid?'

It's unintuitive to call '#valid?' when you want to run validations but
don't care about the return value.

The alias in ActiveRecord isn't strictly necessary (the ActiveModel
alias is still in effect), but it clarifies.
上级 5bf38ffc
......@@ -285,6 +285,8 @@ def errors
# Runs all the specified validations and returns +true+ if no errors were
# added otherwise +false+.
#
# Aliased as validate.
#
# class Person
# include ActiveModel::Validations
#
......@@ -319,6 +321,8 @@ def valid?(context = nil)
self.validation_context = current_context
end
alias_method :validate, :valid?
# Performs the opposite of <tt>valid?</tt>. Returns +true+ if errors were
# added, +false+ otherwise.
#
......
......@@ -295,6 +295,15 @@ def test_validations_on_the_instance_level
assert auto.valid?
end
def test_validate
auto = Automobile.new
assert_empty auto.errors
auto.validate
assert_not_empty auto.errors
end
def test_strict_validation_in_validates
Topic.validates :title, strict: true, presence: true
assert_raises ActiveModel::StrictValidationFailed do
......
* Introduce `validate` as an alias for `valid?`.
This is more intuitive when you want to run validations but don't care about the return value.
*Henrik Nyh*
* Create indexes inline in CREATE TABLE for MySQL.
This is important, because adding an index on a temporary table after it has been created
......
......@@ -60,6 +60,8 @@ def save!(options={})
# Runs all the validations within the specified context. Returns +true+ if
# no errors are found, +false+ otherwise.
#
# Aliased as validate.
#
# If the argument is +false+ (default is +nil+), the context is set to <tt>:create</tt> if
# <tt>new_record?</tt> is +true+, and to <tt>:update</tt> if it is not.
#
......@@ -71,6 +73,8 @@ def valid?(context = nil)
errors.empty? && output
end
alias_method :validate, :valid?
protected
def perform_validations(options={}) # :nodoc:
......
......@@ -52,6 +52,21 @@ def test_error_on_given_context
assert r.save(:context => :special_case)
end
def test_validate
r = WrongReply.new
r.validate
assert_empty r.errors[:author_name]
r.validate(:special_case)
assert_not_empty r.errors[:author_name]
r.author_name = "secret"
r.validate(:special_case)
assert_empty r.errors[:author_name]
end
def test_invalid_record_exception
assert_raise(ActiveRecord::RecordInvalid) { WrongReply.create! }
assert_raise(ActiveRecord::RecordInvalid) { WrongReply.new.save! }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册