【问题标题】:rails routing difference between v3 and V5v3 和 V5 之间的 rails 路由差异
【发布时间】:2016-08-02 00:52:15
【问题描述】:

我必须将 Rails 应用程序从 3.0.6 迁移到 5.0 并且卡住了 - 在较旧的 routes.rb 中,唯一的路线是不明智的:

match ':controller(/:action(/:id(.:format)))'

该应用程序没有 index 方法,但确实使用了一个 index.html.erb 来放置一个呈现到的表单:

<form accept-charset="UTF-8" action="simple/rslts" controller="simple"     method="post">

这会执行一个使用 rslts.html.erb 的 rslts 方法,并使用从表单传入的参数来工作。

我将这个完全相同的代码移至 v5 系统并将路由指定为:

Prefix Verb URI Pattern       Controller#Action
simple GET  /simple(.:format) simple#index
       POST /simple(.:format) simple#rslts
  root GET  /                 welcome#index"

它运行 index.html.erb,我以呈现的形式得到它:

<form controller="simple" action="simple/rslts" accept-charset="UTF-8"    method="post">

它说它找不到 /simple/simple/rslts 的路由失败

我更改了代码,现在渲染:

<form controller="simple" action="rslts" accept-charset="UTF-8"     method="post">

它没有说它找不到 /simple/rslts 的路线,但正如您从我列出的路线中看到的那样,确实存在。

我已经通过十几种方法来解决这个问题,并且毫无启发地阅读了路由指南。这只是控制器和视图,没有别的。我希望有人可以帮助我。

【问题讨论】:

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


    【解决方案1】:
    1. 回复:/simple/simple/rslts:您的action 属性只是相对于当前 URL 的“simple/rslts”。您需要在前面加上一个斜杠,例如action="/simple/rslts"
    2. 路由 /simple/rslts not 根据您的 rake 路由输出定义:右侧显示 simple#rslts 是控制器和操作名称,而不是 URL 的一部分(位于左侧并具有可选的格式说明符)。相反,您已经定义 POST /simple 应该指向 rslts 操作。您需要为/simple/rslts 添加路线或更改操作(再次)以直接发布到/simple

    post '/simple/rslts' =&gt; 'simple#rslts'

    【讨论】:

    • 谢谢欧文。您的解释有助于调用该页面。现在我要处理下一个问题了。我已经失去了 POST 的会话。我希望来自 V3 系统的 Rake Routes 能够向我展示实际的路线。至少我对此了解得更多。
    • 实际上,如果这是 Rails 3 代码库中的唯一路线,它应该很容易,例如/simple/rslts 是 SimpleController#rslts,/payments/remit 是 PaymentsController#remit,等等。
    猜你喜欢
    • 1970-01-01
    • 2020-04-23
    • 2018-06-17
    • 1970-01-01
    • 2021-06-25
    • 2015-04-13
    • 2012-10-31
    相关资源
    最近更新 更多