これはかなり簡単だと思いますが、方法がわからないので、聞いてみようと思いました。
5分以内に何かが発生しなかった場合に、Orderモデルのroll_backメソッドを呼び出す遅延ジョブがアプリにあります。このメソッドは、呼び出されたインスタンスを破棄するだけでなく、その前に、関連付けられたモデルに関連する一連の処理を実行します。この方法はうまく機能しています。
問題は、メソッドの実行が完了すると、ほとんどのユーザーが削除されたばかりの注文の表示ページに表示されることです。時間がなくなり、そのroll_backメソッドが呼び出されたら、ユーザーを別のページにリダイレクトしたいと考えていました。 。
そのため、私は元々、「self.destroy」行の直後のロールバックメソッドでこれを試しました。
redirect_to "/orders/new", :notice => "Blah"
しかし、動作しませんでした。とにかく、インターネットをいじくり回すと、リダイレクトなどのアクションは代わりにコントローラーにあるべきだと私に知らせました。
そこで、代わりに、@order.destroyの直後にあるOrdersControllerのdestroyメソッドにその行を配置しました。roll_backメソッドがself.destroyを呼び出すと、リダイレクトが実行されると思いましたが、それも機能しませんでした。モデルの破棄がコントローラーを通過しないためだと思います。
だから私はこれを行う方法が本当にわかりません。すべての遅延ジョブ/ロールバックのものは私のモデルにありますが、モデルからユーザーをリダイレクトすることは想定されていない/できないようです。これを行う方法はありますか?
ルーティングエラーの場合に備えて、これを私のメソッドで使用して、これを再試行しました(orders_pathが存在することがわかっています)。
def destroy
@order = Order.find(params[:id])
@order.destroy
redirect_to orders_path, notice: "blah"
end