皆さん、
私はレールのアクティブレコードでのトランザクションにかなり慣れていませんが、次のようなコードを持っています:
transaction do
specimen = Specimen.find_by_doc_id(25)
specimen.state = "checking"
specimen.save
result = Inventory.do_check(specimen)
if result
specimen.state="PASS"
else
specimen.state="FAIL"
end
specimen.save
end
ここでトランザクションを使用する目的は、Inventory.do_check で例外が発生した場合 (これは外部 Web サービスのクライアントであり、一連の HTTP 呼び出しとチェックを実行します)、標本.状態を以前の値にロールバックすることです。 . これが上記のように機能するかどうか知りたいですか?また、私の開発マシンでは、Specimen テーブル全体にロックが設定されているように見えます。そのテーブル/モデルをクエリしようとすると、BUSY 例外が発生します (SQLLite を使用しています)。ロックはそのオブジェクト/レコードにのみ設定する必要があると考えていました。
私はこれに本当に慣れていないので、私の質問は非常に素朴かもしれません.