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

Added Base.save! that attempts to save the record just like Base.save but will raise a InvalidRecord exception instead of returning false if the record is not valid [After much pestering from Dave Thomas]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1215 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
David Heinemeier Hansson 2005-04-18 19:19:23 +00:00
parent bd441bb066
commit f46486d37e
3 changed files with 16 additions and 0 deletions

View file

@ -1,5 +1,7 @@
*SVN*
* Added Base.save! that attempts to save the record just like Base.save but will raise a InvalidRecord exception instead of returning false if the record is not valid [After much pestering from Dave Thomas]
* Added eager loading of associations as a way to solve the N+1 problem more gracefully without piggy-back queries. Example:
for post in Post.find(:all, :limit => 100)

View file

@ -1,4 +1,7 @@
module ActiveRecord
class InvalidRecord < ActiveRecordError #:nodoc:
end
# Active Record validation is reported to and from this object, which is used by Base#save to
# determine whether the object in a valid state to be saved. See usage example in Validations.
class Errors
@ -552,6 +555,12 @@ module ActiveRecord
if perform_validation && valid? || !perform_validation then save_without_validation else false end
end
# Attempts to save the record just like Base.save but will raise a InvalidRecord exception instead of returning false
# if the record is not valid.
def save!
valid? ? save_without_validation : raise(InvalidRecord)
end
# Updates a single attribute and saves the record without going through the normal validation procedure.
# This is especially useful for boolean flags on existing records. The regular +update_attribute+ method
# in Base is replaced with this when the validations module is mixed in, which it is by default.

View file

@ -64,6 +64,11 @@ class ValidationsTest < Test::Unit::TestCase
assert_equal "is Wrong Update", r.errors.on("title"), "A reply with a bad content should contain an error"
end
def test_invalid_record_exception
r = Reply.new
assert_raises(ActiveRecord::InvalidRecord) { r.save! }
end
def test_single_error_per_attr_iteration
r = Reply.new
r.save