2010-02-08 46 views
3

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)。

有没有办法做到这一点(禁止定义助手)在更少的参数?

回答

6

我会使用hidden_field_tag并设置手动基于一些值,该值是为每个表单不同的ID。像这样:

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

其中unique_value可以是任何东西。如果这些表单有某种他们引用的父记录,那么它可能是父母的ID。我假设这就是为什么你首先在同一页面上有多个类似的表单。

1

hidden_field_tag尝试:

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

啊,那工作 - 但让我意识到,我低估了我题。实际上我有很多表单,所有这些表单都会在隐藏字段中提交具有不同值的相同操作 - 所以这会生成警告,因为输入ID相同。 – Chowlett 2010-02-08 09:46:08

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" />