Rails form_tag,添加一个隐藏字段

时间:2014-09-26 18:18:00

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

我有一个form_tag,它将代码作为输入:

= form_tag({controller: "charges", action: "new"}, method: "get") do
  = label_tag(:code, "Check code:")
  = text_field_tag(:code)
  = hidden_field :item,  value: @item.id
  = submit_tag("Search")

我想要一个隐藏字段,为URL添加一定的值。我基本上想要创建URL example.com/charges/new?item=1&code=mycode,其中'1'是项ID,'my​​code'是用户输入的代码,但我无法使其工作。

1 个答案:

答案 0 :(得分:3)

hidden_fieldhidden_field_tag不一样。你想要后者。 hidden_field的工作方式与text_field类似,因此需要一个对象(通常位于form_for内)。与hidden_field_tag一样,text_field_tag没有。这是Rails中非常常见的“问题”。

试试这个:

= hidden_field_tag "item", @item.id

P.S。如果此表单用于创建新的模型对象(从您的代码我猜测它是用于创建Charge对象),您可能希望使用form_for。像这样:

= form_for :charge do |f|
  = f.label :code, "Check code:"
  = f.text_field :code
  = f.hidden_field :item_id, @item.id
  = f.submit "Search"

这可能会大大简化您的控制器,因为在您的create操作中,您可以Charge.create(params)。我只是猜测你的实际模型是什么样子,但它应该给你正确的想法。您应该通读form_for docs了解更多信息。