rails simple_form - скрытое поле - создать?

174

Как вы можете иметь скрытое поле с простой формой?

Следующий код:

= simple_form_for @movie do |f|
  = f.hidden :title, "some value"
  = f.button :submit

приводит к этой ошибке:

undefined method `hidden' for #SimpleForm::FormBuilder:0x000001042b7cd0
Линус Олеандр
источник

Ответы:

309

попробуй это

= f.input :title, :as => :hidden, :input_html => { :value => "some value" }
fl00r
источник
8
Спасибо, что сработало. = f.input :title, :as => :hidden, :input_html => { :value => "some value" }
Линус Олеандр
5
Это simple_formспособ создания скрытых входных данных, однако, если требуется только скрытый ввод, просто используйте hidden_fieldпостроитель форм Rails, поскольку Simple Form наследует все методы построителя форм.
scarver2
281

Короче пока что !!!

=f.hidden_field :title, :value => "some value"

Короче, СУХОЙ и, возможно, более очевидный.

Конечно, с ruby ​​1.9 и новым форматом хэша мы можем уйти на 3 символа короче с ...

=f.hidden_field :title, value: "some value"
Майкл Даррант
источник
1
Или <% = f.hidden_field: term_id,: value => @
action.term_id
2
Это должен быть принятый ответ. Несмотря на то, что задан вопрос о простой форме, нет смысла использовать ее, когда это приводит к тому же результату с более коротким синтаксисом.
Грег Бласс
5
= f.input_field :title, as: :hidden, value: "some value"

Это тоже вариант. Обратите внимание, что он пропускает любую оболочку, определенную для вашего конструктора форм.

Фуад сауд
источник
5

Правильный способ (если вы не пытаетесь сбросить значение ввода hidden_field):

f.hidden_field :method, :value => value_of_the_hidden_field_as_it_comes_through_in_your_form

Где :method метод, который при вызове объекта приводит к нужному значению

Итак, следуя примеру выше:

= simple_form_for @movie do |f|
  = f.hidden :title, "some value"
  = f.button :submit

Код, используемый в примере, будет сбрасывать значение (: title) @movie, передаваемое формой. Если вам нужно получить доступ к значению (: title) фильма, а не к его сбросу, сделайте следующее:

= simple_form_for @movie do |f|
  = f.hidden :title, :value => params[:movie][:title]
  = f.button :submit

Опять же, используйте только мой ответ, если вы не хотите сбрасывать значение, указанное пользователем.

Я надеюсь это имеет смысл.

Uzzar
источник
1
Ибо simple_form_for, hiddenметод, используемый здесь, вызовет undefined method скрытую ошибку 'для # <SimpleForm :: FormBuilder: 0x00007ffa6cde0be8> `
Кири Мери