从form_tag Rails发送url param

时间:2015-06-02 09:41:32

标签: ruby-on-rails ruby forms routes

这是我的情况:

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消耗。

有什么想法吗?

2 个答案:

答案 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 。来电。:)