Rails form_tag,添加隐藏字段

rap*_*tle 2 forms ruby-on-rails 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")
Run Code Online (Sandbox Code Playgroud)

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

Jor*_*ing 6

hidden_field并且hidden_field_tag不一样。你想要后者。hidden_field工作方式类似于text_field,因此需要一个对象(通常在 a 内form_for)。hidden_field_tag,像text_field_tag,不一样。这是 Rails 中非常常见的“陷阱”。

尝试这个:

= hidden_field_tag "item", @item.id
Run Code Online (Sandbox Code Playgroud)

PS 如果此表单用于创建新的模型对象(从您的代码来看,我猜测它是用于创建 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"
Run Code Online (Sandbox Code Playgroud)

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