Added Base.save! that attempts to save the record just like Base.save but will...

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
上级 bd441bb0
*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)
......
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 @@ def save_with_validation(perform_validation = true)
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.
......
......@@ -64,6 +64,11 @@ def test_error_on_update
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册