2010-02-08 67 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" />