私はコントローラにアクションの例があります。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
トランザクションロジックをモデルに入れると、トランザクションは1つのモデルに限定されず、別の懸念ルールを破らないでしょうか?通常、トランザクションは複数のモデルにまたがる可能性が高く、DBレベルでは必ずしも互いに関連しているとは限りません。 – xSNRG
ええ、私は私のコメントのその特定の側面に心の変化をもたらしました。私はそれをコントローラーから外すという考えが好きですが、複数モデルのやりとりはどこかにラップされるべきです。たぶん別のクラスかもしれませんが、状況によってはコントローラーが正しい場所になっているかもしれません。 –