0

我猜这个很容易做到,但我不知道怎么做,所以我想我会问。

如果在五分钟内没有发生任何事情,我的应用程序中有一个延迟作业,它在我的 Order 模型中调用 roll_back 方法。该方法既破坏了它被调用的实例,又在这样做之前,对关联的模型做了一堆相关的事情。该方法效果很好。

问题是,一旦方法完成运行,大多数用户将在刚刚删除的订单的显示页面上,我希望在时间用完并且调用 roll_back 方法后将用户重定向到不同的页面.

所以我最初只是在回滚方法中尝试了这个,就在“self.destroy”行之后。

redirect_to "/orders/new", :notice => "Blah"

不过没用。无论如何,互联网上的一些人告诉我重定向之类的操作应该在控制器中。

所以我转而将该行放在订单控制器的销毁方法中,就在@order.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自动更新一些页面,包括这个页面。您可能想查看实时更新如何工作?了解更多信息。另一种技术是使用 javascript 请求向您的应用发出请求,以验证订单是否仍然有效。如果结果表明订单不再有效,您可以轻松地重定向。无论如何,希望这会有所帮助 - 祝你好运!

于 2012-10-19T07:04:04.137 回答