form_tag的路径不正确

问题描述:

我正在研究一个小的Rails 4.2应用程序来修改2个Rails引擎中的几个db表中的记录。一个rails应用程序是为此目的而创建的。没有型号只有一个控制器user_menusform_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呢?

+0

这是一个请求'doper'的视图模板。改成'method::post'并且错误是一样的(缺少'doper'模板) – user938363

+0

那么,你的路线必须与你在表格中使用的一致。确保他们这样做。而且,“doper”动作必须渲染一些东西。解决这个问题。 –

+0

在routes.rb中声明一个用于更新记录集合(没有数据模型)的路由的正确方法是什么?我试过'post/handler,来:'user_menus#doper'或'patch。在doper结尾处,它会重定向。全部数据库更新应该在'doper'内执行。 – user938363

当你做<%= 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