我正在开发一个小型的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
有一个定义。我在这里缺少什么?
答案 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”}做