1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

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.
This commit is contained in:
Henrik Nyh 2014-03-23 12:09:55 +01:00
parent 5bf38ffc4f
commit 2e70f44123
5 changed files with 38 additions and 0 deletions

View file

@ -285,6 +285,8 @@ module ActiveModel
# 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 @@ module ActiveModel
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.
#

View file

@ -295,6 +295,15 @@ class ValidationsTest < ActiveModel::TestCase
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

View file

@ -1,3 +1,9 @@
* 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

View file

@ -60,6 +60,8 @@ module ActiveRecord
# 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 @@ module ActiveRecord
errors.empty? && output
end
alias_method :validate, :valid?
protected
def perform_validations(options={}) # :nodoc:

View file

@ -52,6 +52,21 @@ class ValidationsTest < ActiveRecord::TestCase
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! }