这个问题可能已被问到很多次了。在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中的声明吗?非常感谢。
答案 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 %>