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 的路线,但正如您从我列出的路线中看到的那样确实存在。
我已经研究了十几种方法,并且毫无启发地阅读了路由指南。这只是控制器和视图,没有别的。我希望有人能帮助我。
- 回复:
/simple/simple/rslts
:您的 action
属性只是 "simple/rslts",相对于当前的 URL。您需要在前面加上斜杠,例如action="/simple/rslts"
.
- 路由 /simple/rslts 是 not 根据您的 rake 路由输出定义的:右侧
simple#rslts
是控制器和动作名称,而不是 URL 的一部分(位于左侧并具有可选的格式说明符)。相反,您定义了 POST /simple
应该指向 rslts
操作。您需要为 /simple/rslts
添加路线或将操作(再次)更改为 post 直接到 /simple
.
post '/simple/rslts' => 'simple#rslts'
我必须将 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 的路线,但正如您从我列出的路线中看到的那样确实存在。
我已经研究了十几种方法,并且毫无启发地阅读了路由指南。这只是控制器和视图,没有别的。我希望有人能帮助我。
- 回复:
/simple/simple/rslts
:您的action
属性只是 "simple/rslts",相对于当前的 URL。您需要在前面加上斜杠,例如action="/simple/rslts"
. - 路由 /simple/rslts 是 not 根据您的 rake 路由输出定义的:右侧
simple#rslts
是控制器和动作名称,而不是 URL 的一部分(位于左侧并具有可选的格式说明符)。相反,您定义了POST /simple
应该指向rslts
操作。您需要为/simple/rslts
添加路线或将操作(再次)更改为 post 直接到/simple
.
post '/simple/rslts' => 'simple#rslts'