form_tag的路径不正确
问题描述:
我正在研究一个小的Rails 4.2应用程序来修改2个Rails引擎中的几个db表中的记录。一个rails应用程序是为此目的而创建的。没有型号只有一个控制器user_menus
。form_tag的路径不正确
class UserMenusController < ApplicationController
def home
end
def doper
#update db records
end
home.html.erb
是一个窗体,输入一些params更新。
<%= form_tag(:controller => 'user_menus', :action => 'doper', :method => 'get') do %>
<div class="form-inputs">
<%= label_tag(:db_name, "Release") %>
<%= select_tag(:db_name, options_for_select([['',''],['Engine Config', 'engine_config'], ['User Access', 'user_access'], ['Search Stats', 'search_stats']])) %>
<%= submit_tag 'Submit' %>
</div>
<% end %>
end
在routes.rb
,有定义:
get '/handler', :to => "user_menus#doper"
root :to => "user_menus#home"
的问题是,我有时间难以做出正确的路径为form_tag
。错误是:
No route matches {:action=>"doper", :controller=>"user_menus", :method=>"get"}
以下<%= form_tag('/handler') do %>
不工作,以及:
No route matches [POST] "/handler"
在rake routes
,对于/handler
的定义。我在这里错过了什么?
答
你必须为你的行动路线,还不如用它
form_tag '/handler', method: :get do
是的,使用GET请求产生的副作用是坏的。你为什么不用POST呢?
答
当你做<%= form_tag('/handler') do %>
默认情况下,动词是post
。 尝试加入
post '/handler' => "user_menus#doper"
到您的路线。
答
在这里,你的表单标签传递方法得到。你可以通过检查元素来检查你的表单方法。
默认情况下,表单标签采用表单方法。您可以覆盖它,在这里您需要更改语法。
<%= form_tag({:controller => "user_menus", :action => "doper"}, {:method => "get"}) %>
or
<%= form_tag({:controller => "user_menus", :action => "doper"}, :method => "get") %>
答
“为handler_path” 添加名称路线
得到 '/处理程序',以:“user_menus#掺杂装置,为:handler_path
您的form_tag:
form_tag handler_path,{method:“get”} do
这是一个请求'doper'的视图模板。改成'method::post'并且错误是一样的(缺少'doper'模板) – user938363
那么,你的路线必须与你在表格中使用的一致。确保他们这样做。而且,“doper”动作必须渲染一些东西。解决这个问题。 –
在routes.rb中声明一个用于更新记录集合(没有数据模型)的路由的正确方法是什么?我试过'post/handler,来:'user_menus#doper'或'patch。在doper结尾处,它会重定向。全部数据库更新应该在'doper'内执行。 – user938363