这是我的情况:
I'm in /car
我希望通过以下形式传递汽车模型:
/car/:model for example /car/bmw+z4
这是我的表格:
<%= form_tag(get_model_path, :method => 'get') do |f| %>
<%= f.text_field, :model %>
<% end %>
并显示错误消息:
No route matches {:action=>"get_model", :controller=>"cars"} missing required keys: [:model]
所有这些都没有模型或activerecord,因为API消耗。
有什么想法吗?
答案 0 :(得分:0)
是通过它:
<%= form_tag(get_model_path(model: 'name'), :method => 'get') do |f| %>
<%= f.text_field, :model %>
<% end %>
这是我复制并修复的内容。查看路线
$ rake routes | grep car
get_model GET /car/:model(.:format) notifications#get_model
现在看一下控制台:
2.2.1 :001 > app.get_model_path
ActionController::UrlGenerationError: No route matches {:action=>"get_model", :controller=>"notifications"} missing required keys: [:model]
2.2.1 :002 > app.get_model_path(model: "foo")
=> "/car/foo"
我的 routes.rb 文件:
get 'car/:model', to: 'notifications#get_model', as: 'get_model'
答案 1 :(得分:0)
从表单传递任何值的最简单方法是使用hidden_fields。所以在您的表单中...
<%= form_tag(get_model_path, :method => 'get') do |f| %>
<%= f.text_field, :model %>
<% f.hidden_field(:hidden_value, :value=>"MyModelValue")%>
<% end %>
所以在控制器上,您可以使用以下方式获取值: -
##to get MyModelValue
model_value=params[:MODEL][:hidden_value]
但是如果你想在提交表单时传递url中可见的值,那么所有的表单值都将与url一起传递,这在安全性方面是不好的。这就是为什么每个表单都应该被提交使用 POST 而不是 GET 。来电。:)