rails路由v3和V5之间的区别

时间:2016-08-02 00:52:16

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

我必须将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的路由,但正如您从我列出的确实存在的路由中可以看到的那样。

我已经在十几种方式中使用了这个并且阅读了路线指南而没有任何启示。这只是控制器和视图,没有别的。我希望有人可以帮助我。

1 个答案:

答案 0 :(得分:0)

  1. Re:/simple/simple/rslts:您的action属性只是&#34; simple / rslts&#34;这是相对于当前的URL。您需要预先设置斜杠,例如action="/simple/rslts"
  2. 路由/ simple / rslts根据您的rake路由输出定义 :右侧显示simple#rslts是控制器和操作名称,不是URL的一部分(位于左侧,具有可选的格式说明符)。相反,您已定义POST /simple应指向rslts操作。您需要为/simple/rslts添加路线或更改操作(再次)以直接发布到/simple
  3. post '/simple/rslts' => 'simple#rslts'