0

これはかなり簡単だと思いますが、方法がわからないので、聞いてみようと思いました。

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
4

1 に答える 1

1

すでにわかっているように、要求がない場合は応答できません (つまり、応答するには要求が必要です)。では、表示された情報が古くなったらどうしますか? StackOverflow はWebSocketsを使用して、このページを含む一部のページを自動更新します。リアルタイム更新はどのように機能しますか?をご覧ください。詳細については。もう 1 つの手法は、javascript リクエストを使用してアプリにリクエストを送信し、注文がまだ有効であることを確認することです。結果が注文が有効でなくなったことを示している場合は、簡単にリダイレクトできます。とにかく、これがお役に立てば幸いです - 頑張ってください!

于 2012-10-19T07:04:04.137 に答える