Rails 5路由:为什么“ redirect_to @model”与“ redirect_to model_path(@ model.id)”不同?

时间:2019-05-18 19:03:09

标签: ruby-on-rails-5 rails-routing

我正在使用Rails 5应用程序,并且有一个名为 @offer 的模型。在“商品”控制器中,我有一个操作要将我重定向到从数据库中获得的特定商品(在下面的示例中,商品ID = 14。)

在开发环境中工作,如果我在控制器中使用 redirect_to offer_path(@ offer.id),浏览器将在 https://dev.example.com/offers/14 中正确显示要约>网址。请注意URL中的 dev 部分。到目前为止一切顺利。

但是,如果我在控制器中使用 redirect_to @offer ,浏览器将尝试打开 https://example.com/offers/14 URL(即制作版本 URL),页面显示错误(很抱歉,出了点问题。 如果您是应用程序所有者,请检查日志以获取更多信息。

我想使用 redirect_to @offer ,但是首先,我认为我需要理解为什么一个重定向方法的行为与另一个不同。感谢您的任何见识。

1 个答案:

答案 0 :(得分:0)

这个问题很老,但我仍在回答,因为它将来可能会帮助其他Rails用户。

在“商品”控制器中,redirect_to @offer或redirect_to offerspath(@offer)会解析为相同的/ offers /:id生产或开发路径。

我认为,在生产数据库中ID 14的商品不存在,而且在控制器中,如果op正在使用find方法而没有抢救异常,那么show动作可能会在尝试从中获取ID 14的商品时出错。生产数据库,但是find方法返回了异常,如果不进行补救,可能会显示默认错误响应。

我们没有操作员发布的控制器代码,但对我来说,这似乎是最合乎逻辑的答案。