e コマース サイトのチェックアウト ページを作成しています。新しい User モデルと新しい Order モデルを作成するかなり長いトランザクションがあります。これらのモデルの作成をトランザクションにラップして、一方の検証が失敗した場合にもう一方がデータベース内でぶらぶらしないようにしました。以下は、私の OrdersController のコードを簡略化したものです。
rescue_from ActiveRecord::Rollback, with: :render_new
def render_new
render action: 'new'
end
ActiveRecord::Base.transaction do
@user = User.new params[:user]
unless @user.save
raise ActiveRecord::Rollback
end
//More stuff
...
@order = Order.new params[:order]
...
unless @order.save
raise ActiveRecord::Rollback
end
end
私が見ているエラーはこれです:
{:locale=>[:en]、:formats=>[:html]、:handlers=>[:erb、:builder、:coffee]} でのテンプレートの注文/作成、アプリケーション/作成の欠落
注文/新規をレンダリングする代わりに、テンプレートの注文/作成とアプリケーション/作成をレンダリングしようとする理由について混乱しています。
ロールバックが発生するようにトランザクションを強制的に失敗させるより良い方法はありますか?