提交 d424ded6 编写于 作者: F Franky W

Print out a meaningful error when ActiveRecord::ReadOnlyRecord is raised

Currently, there is no messages which get printed out. Convoluted system
may have hooks that create other objects in which case we only fail with
no messages. This commit changes this information allowing you to know
which object is the one that actually raised the error.
上级 9a517b5a
...@@ -188,7 +188,7 @@ def delete ...@@ -188,7 +188,7 @@ def delete
# and <tt>destroy</tt> returns +false+. See # and <tt>destroy</tt> returns +false+. See
# ActiveRecord::Callbacks for further details. # ActiveRecord::Callbacks for further details.
def destroy def destroy
raise ReadOnlyRecord if readonly? raise ReadOnlyRecord, "#{self.class} is marked as readonly" if readonly?
destroy_associations destroy_associations
destroy_row if persisted? destroy_row if persisted?
@destroyed = true @destroyed = true
...@@ -519,7 +519,7 @@ def relation_for_destroy ...@@ -519,7 +519,7 @@ def relation_for_destroy
end end
def create_or_update def create_or_update
raise ReadOnlyRecord if readonly? raise ReadOnlyRecord, "#{self.class} is marked as readonly" if readonly?
result = new_record? ? _create_record : _update_record result = new_record? ? _create_record : _update_record
result != false result != false
end end
......
...@@ -22,9 +22,12 @@ def test_cant_save_readonly_record ...@@ -22,9 +22,12 @@ def test_cant_save_readonly_record
assert !dev.save assert !dev.save
dev.name = 'Forbidden.' dev.name = 'Forbidden.'
end end
assert_raise(ActiveRecord::ReadOnlyRecord) { dev.save } e = assert_raise(ActiveRecord::ReadOnlyRecord) { dev.save }
assert_raise(ActiveRecord::ReadOnlyRecord) { dev.save! } assert_equal "Developer is marked as readonly", e.message
assert_raise(ActiveRecord::ReadOnlyRecord) { dev.destroy } e = assert_raise(ActiveRecord::ReadOnlyRecord) { dev.save! }
assert_equal "Developer is marked as readonly", e.message
e = assert_raise(ActiveRecord::ReadOnlyRecord) { dev.destroy }
assert_equal "Developer is marked as readonly", e.message
end end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册