2010-02-08 2 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 (дубликаты идентификаторов), если их несколько.

Есть ли способ сделать это (запрет определения помощника) в меньшем количестве аргументов?

ответ

6

Я хотел бы использовать hidden_field_tag и установить идентификатор вручную, основываясь на какой-то значение, которое различно для каждой формы. Например:

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

Где unique_value может быть вообще чем угодно. Если эти формы имеют какую-то родительскую запись, на которую они ссылаются, это может быть идентификатор родителя. Я предполагаю, что поэтому у вас есть несколько похожих форм на одной странице.

1

Попробуйте hidden_field_tag:

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

Ах, что работает - но заставляет меня понять, я занижена мой вопрос. На самом деле у меня есть несколько форм, все из которых подчиняются одному и тому же действию с разными значениями в скрытом поле - поэтому это генерирует предупреждения, потому что идентификаторы ввода одинаковы. – Chowlett

3

Вы можете просто передать идентификатор в качестве опции. Метод (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" /> 
Смежные вопросы