将默认参数传递给rails form_for

时间:2017-04-25 10:59:18

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个简单的表格,如:

= form_tag history_path(params), :method => :get do
  = radio_button_tag :history_id, @history.id, true
  History
  %br

  = submit_tag "Get History", class: "btn generate"

现在, params 有一些额外的信息,例如{visit_id: 1, company_id: 32}

即使我检查表单,我也会将操作视为:

<form action="/history?visit_id=1&company_id=32" accept-charset="UTF-8" method="get">

但是,点击提交后,参数永远不会通过,我只会传递以下参数(在服务器日志中):

Parameters: {"utf8"=>"✓", "history_id"=>"939", "commit"=>"Get History"}

修改

我知道我可以将它们添加到hidden_field_tag,但是参数可以很多,我不能继续添加隐藏的字段。所以,我需要理解为什么上述方法不起作用。

2 个答案:

答案 0 :(得分:3)

这不是一个rails问题,它只是html,因为你的表单有get方法,它将替换你在url操作上的所有get变量,只让表单上的那些变量。 你可以把它结合起来,在url中发送get变量,但是将表单作为post,而不是get。 在这种情况下,您有2个选项,使用@Deepak Mahakale发送的解决方案,或将您的表单更改为发布,并在控制器和路由上进行相应的更改。

答案 1 :(得分:2)

尝试将其添加为hidden_field_tag

= form_tag history_path(params), :method => :get do
  = hidden_field_tag :visit_id, 1
  = hidden_field_tag :company_id, 32
  = radio_button_tag :history_id, @history.id, true
  History
  %br

  = submit_tag "Get History", class: "btn generate"

现在您将收到参数中的数据

Parameters: {"utf8"=>"✓", "history_id"=>"939", "visit_id" => "1", "company_id" => "32", "commit"=>"Get History"}