我必须将Rails应用程序从3.0.6迁移到5.0并且卡在旧路由中.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的路由,但正如您从我列出的确实存在的路由中可以看到的那样。
我已经在十几种方式中使用了这个并且阅读了路线指南而没有任何启示。这只是控制器和视图,没有别的。我希望有人可以帮助我。
答案 0 :(得分:0)
/simple/simple/rslts
:您的action
属性只是&#34; simple / rslts&#34;这是相对于当前的URL。您需要预先设置斜杠,例如action="/simple/rslts"
。simple#rslts
是控制器和操作名称,不是URL的一部分(位于左侧,具有可选的格式说明符)。相反,您已定义POST /simple
应指向rslts
操作。您需要为/simple/rslts
添加路线或更改操作(再次)以直接发布到/simple
。 post '/simple/rslts' => 'simple#rslts'