Простое скрытое поле в немодельной форме - PullRequest
3 голосов
/ 08 февраля 2010

Какой самый простой способ в 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 (дублированные идентификаторы), если их несколько.

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

Ответы [ 3 ]

6 голосов
/ 08 февраля 2010

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

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

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

3 голосов
/ 08 февраля 2010

Вы можете просто передать 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" />
1 голос
/ 08 февраля 2010

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

<%= hidden_field_tag :field_name, "foo" %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...