【问题标题】:Rails 5 routing: why is "redirect_to @model" different than "redirect_to model_path(@model.id)"?Rails 5 路由:为什么“redirect_to @model”与“redirect_to model_path(@model.id)”不同?
【发布时间】:2019-05-18 19:03:09
【问题描述】:

我正在开发一个 Rails 5 应用程序,并且有一个名为 @offer 的模型。在 Offers 控制器中,我有一个操作,我想重定向到我从数据库中获得的特定优惠(在下面的示例中,Offer Id = 14。)

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    在 Offers 控制器中,redirect_to @offer 或 redirect_to offer_path(@offer) 将解析为相同的路径 /offers/:id,无论是生产还是开发。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      • 2017-10-21
      • 2010-11-03
      相关资源
      最近更新 更多