非模型形式的简单隐藏字段

时间:2010-02-08 09:34:50

标签: ruby-on-rails forms

Ruby-on-Rails中最简单的方法是创建几个具有已知值和多个非模型形式的相同名称的简单隐藏字段(在我的情况下为form_remote_tag,但我猜这是不相关的)?

“简单的隐藏字段”,我的意思是名称只是一个字符串(field_name)而不是数组的一部分(field_name[]),因此可以简单地读取该值从params散列为params[:field_name]而不是params[:field_name][0]

我找到了

<% form_remote_tag :url => {:action => "do_act"} do %>
  <%= hidden_field :field_name, 0, :name => "field_name", :value => "foo" %>
  <%= submit_tag "Submit" %>
<% end %>

生成可接受的元素(<input id="field_name_0" name="field_name" type="hidden" value="foo" />),但如果省略:name参数,则渲染字段的名称为field_name[0]。省略0显然会导致奇怪的行为。

如果只有一个这样的表单,

<%= hidden_field_tag :field_name, "foo" %>会生成一个可接受的元素,但如果有多个表单,则生成HTML警告(重复的ID)。

有没有办法在较少的参数中执行此操作(禁止定义帮助程序)?

3 个答案:

答案 0 :(得分:6)

我会使用hidden_field_tag并根据每个表单的不同值手动设置ID。像这样:

<%= hidden_field_tag :field_name, 'value', :id => 'field_name_' + unique_value %>

unique_value可以是任何东西。如果这些表单具有他们引用的某种父记录,则它可以是父记录的ID。我认为这就是为什么你首先在同一页面上有多个相似的表格。

答案 1 :(得分:3)

您可以简单地将ID作为选项传递。方法(form_tag_helper.rb)定义为:

def hidden_field_tag(name, value = nil, options = {})
  text_field_tag(name, value, options.stringify_keys.update("type" => "hidden"))
end

所以写作:

<%= hidden_field_tag :field_name, "foo", :id => "hidden_field_1" %>
<%= hidden_field_tag :field_name, "bar", :id => "hidden_field_2" %>

产地:

<input id="hidden_field_1" name="field_name" type="hidden" value="foo" />
<input id="hidden_field_2" name="field_name" type="hidden" value="bar" />

答案 2 :(得分:1)

尝试hidden_field_tag

<%= hidden_field_tag :field_name, "foo" %>