我有一个模型方法,我想从不同的控制器调用它。它看起来像这样:
def Post < ActiveRecord::Base
def read!
self.read_at = Time.now
self.save
self.thread.status = Status.find_by_name("read")
self.thread.save
end
end在我的控制器中,如果我调用@post.read!,会回滚任何错误吗?
发布于 2011-04-06 10:15:07
例如,在您当前的设置中,如果read_at给出错误,它仍然会继续执行thread.status的代码。
您想要使用ActiveRecord transactions
def read!
transaction do
self.read_at = Time.now
self.save
self.thread.status = Status.find_by_name("read")
self.thread.save
end
end通过使用事务,您可以确保您的所有数据库调用(在事务块中)都将持久化到数据库,或者根本不会。
https://stackoverflow.com/questions/5560731
复制相似问题