我猜这个很容易做,但我不知道怎么做,所以我想我会问。
我的应用程序中有一个延迟作业,如果在五分钟内没有发生某些事情,我会在我的订单模型中调用roll_back方法。该方法都会破坏它所调用的实例,并且在这样做之前,会对关联模型执行大量相关操作。这种方法很有效。
问题是,一旦方法运行完毕,大多数用户将在刚刚删除的订单的显示页面上,并且我希望一旦时间用完并且roll_back将用户重定向到另一个页面方法被称为。
所以我最初只是在回滚方法中尝试了这个,就在“self.destroy”行之后。
redirect_to "/orders/new", :notice => "Blah"
但是,没有工作。无论如何,互联网上的一些人告诉我,重定向等操作应该在控制器中。
所以我在@ order.destroy之后立即将该行放在Orders Controller的destroy方法中。我想当roll_back方法调用self.destroy时,它会进行重定向 - 但这也不起作用,我猜是因为模型destroy不会通过控制器。
所以我不确定如何做到这一点。所有延迟作业/回滚的东西都在我的模型中,但我显然不应该/无法从模型中重定向用户。知道怎么做吗?
在我的方法中再次尝试这个,以防路由错误(我知道orders_path存在)。
def destroy
@order = Order.find(params[:id])
@order.destroy
redirect_to orders_path, notice: "blah"
end
答案 0 :(得分:1)
正如您已经发现的那样,您无法回复任何请求(换句话说,如果您要回复,则需要请求)。那么,当您显示的信息变得陈旧时,您会怎么做? StackOverflow使用WebSockets自动更新某些页面,包括此页面。您可以查看How do real time updates work?以获取更多信息。另一种技术是使用javascript请求向您的应用发出请求,以验证订单是否仍然有效。如果结果表明订单不再有效,您可以轻松重定向。无论如何,希望这有帮助 - 祝你好运!