form_tag的路径不正确

时间:2016-06-21 04:45:37

标签: ruby-on-rails

我正在开发一个小型的Rails 4.2应用程序,用于修改2个rails引擎中的几个db表中的记录。为此目的创建了一个rails应用程序。只有一个控制器user_menus没有模型。

class UserMenusController < ApplicationController

  def home

  end

  def doper
    #update db records

  end

home.html.erb是输入某些参数以进行更新的表单。

<%= 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有一个定义。我在这里缺少什么?

4 个答案:

答案 0 :(得分:3)

这里,你的表单标签传递方法得到。您可以通过inspect元素检查表单方法。

默认情况下,form tag采用form方法。您可以覆盖它,在这里您需要更改语法。

<%= form_tag({:controller => "user_menus", :action => "doper"}, {:method => "get"}) %>
or

<%= form_tag({:controller => "user_menus", :action => "doper"}, :method => "get") %>

答案 1 :(得分:1)

你有行动路线,不妨使用它

form_tag '/handler', method: :get do

是的,使用GET请求产生副作用是不好的。为什么不使用POST呢?

答案 2 :(得分:1)

默认情况下执行<%= form_tag('/handler') do %>时,动词为post。 尝试添加

post '/handler' => "user_menus#doper"

到你的路线。

答案 3 :(得分:0)

将名称“as handler_path”添加到路线

获取'/ handler',以:“user_menus #doper, as :: handler_path

您的form_tag:

form_tag handler_path,{method:“get”}做