我在控制器中有一个示例操作。RAILS 3 - 控制器中的事务
def some_action
product = Product.new
product.name = "namepro"
if product.save
client.update_attribute(:product_id,product.id)
end
end
如何为此代码添加事务?我尝试用这个例子代码:
def some_action
**transaction do**
product = Product.new
product.name = "namepro"
if product.save
client.update_attribute(:product_create,Time.now)
end
**end**
end
但它会产生这个错误:
undefined method `transaction'
我读到的控制器使用的交易是一个不好的做法,但我不知道为什么原因(http://markdaggett.com/blog/2011/12/01/transactions-in-rails/ )
在此示例中,如果产品已创建并保存,并且客户端更新失败...... Rails一定不能做任何事情。
谢谢。
非常感谢吉姆,你真的帮我解释一下! – user1364684 2013-04-05 09:12:38
如果将事务逻辑放入模型中,那么交易不会被限制为一个模型那么,为了不破坏单独的关注规则?通常,交易跨越多个模型的可能性很高,这些模型在数据库层面不一定相互关联。 – xSNRG 2014-01-15 16:23:54
是的,我在评论的这个特定方面已经改变了内心。我确实喜欢把它放在控制器外面的想法,但是多模型交互应该被封装在某个地方。也许是另一个阶级,但在某些情况下,控制者毕竟可能是正确的。 – 2014-01-15 17:07:09