Rails 3.2中form_tag的路由错误

时间:2014-06-07 04:11:45

标签: ruby-on-rails ruby-on-rails-3

这个问题可能已被问到很多次了。在mass_onboard_result的routes.rb中声明了自定义操作engine_config

collection do
  put :mass_onboard_result
end

在发动机配置的控制器中,有mass_onboard_result的定义:

def mass_onboard_result
   code here
end

以下是以form_tag开头的视图:

<%= form_tag mass_onboard_result_engine_configs_path do %>
  .......
  <%=submit_tag 'Save' %>
<% end %>

点击表单上的Save时,会出现路由错误:

No route matches [POST] "/onboard_data_upload/engine_configs/mass_onboard_result"

Try running rake routes for more information on available routes.

rake routes的输出中,有:

mass_onboard_result_engine_configs PUT    /engine_configs/mass_onboard_result(.:format)

什么可能导致错误。是routes.rb中的声明吗?非常感谢。

2 个答案:

答案 0 :(得分:1)

您已将路线定义为put路线,但您的表单正在创建post请求。

如果您将method: :put添加到form_tag选项中,问题是否已解决?

答案 1 :(得分:1)

错误写在这里:

No route matches [POST]...

Rails开发人员(特别是开始开发人员)的一个典型问题是忽略了HTTP verb在路由结构中的重要性。

-

<强>修正

当您使用form时,它将默认通过POST动词发送数据。但是,您的路线已明确将路线定义为使用PUT动词:

collection do
  put :mass_onboard_result
end

要解决此问题,您需要更改接受POST响应的路由,或者form发送PUT请求:

#config/routes.rb
collection do
   match :mass_onboard_result, via [:post, :put]
end

-OR -

#view
<%= form_tag your_path, method: :put %>