rails v3 和 V5 之间的路由差异

rails routing difference between v3 and V5

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

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

该应用程序没有索引方法,但确实使用 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 的路线,但正如您从我列出的路线中看到的那样确实存在。

我已经研究了十几种方法,并且毫无启发地阅读了路由指南。这只是控制器和视图,没有别的。我希望有人能帮助我。

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

post '/simple/rslts' => 'simple#rslts'