szyny simple_form - ukryte pole - utworzyć?

174

Jak możesz mieć ukryte pole z prostym formularzem?

Poniższy kod:

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

powoduje ten błąd:

undefined method `hidden' for #SimpleForm::FormBuilder:0x000001042b7cd0
Linus Oleander
źródło

Odpowiedzi:

309

Spróbuj tego

= f.input :title, :as => :hidden, :input_html => { :value => "some value" }
fl00r
źródło
8
Dzięki, zadziałało. = f.input :title, :as => :hidden, :input_html => { :value => "some value" }
Linus Oleander
5
Jest to simple_formsposób na wykonanie ukrytych danych wejściowych, jednak jeśli potrzebne jest tylko ukryte wejście, po prostu użyj kreatora hidden_fieldformularzy Railsów, ponieważ Simple Form dziedziczy wszystkie metody budujące formularze.
scarver2
281

Najkrótszy jak dotąd !!!

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

Krótszy, bardziej SUCHY i być może bardziej oczywisty.

Oczywiście z ruby ​​1.9 i nowym formatem skrótu możemy skrócić o 3 znaki za pomocą ...

=f.hidden_field :title, value: "some value"
Michael Durrant
źródło
1
Lub <% = f.hidden_field: term_id,: value => @ transaction.term_id%>
mirap
2
To powinna być akceptowana odpowiedź. Mimo że pytanie o prostą formę, nie ma powodu, aby go używać, skoro daje to dokładnie to samo przy krótszej składni.
Greg Blass
5
= f.input_field :title, as: :hidden, value: "some value"

Jest również opcją. Zwróć jednak uwagę, że pomija wszelkie opakowanie zdefiniowane dla twojego kreatora formularzy.

Fuad Saud
źródło
5

Prawidłowy sposób (jeśli nie próbujesz resetować wartości wejścia hidden_field) to:

f.hidden_field :method, :value => value_of_the_hidden_field_as_it_comes_through_in_your_form

Gdzie :method jest metoda, która wywołanie obiektu daje żądaną wartość

Więc postępując zgodnie z powyższym przykładem:

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

Kod użyty w przykładzie zresetuje wartość (: tytuł) @movie przekazywanego przez formularz. Jeśli chcesz uzyskać dostęp do wartości (: tytułu) filmu, zamiast go resetować, zrób to:

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

Ponownie użyj mojej odpowiedzi, że nie chcesz resetować wartości przesłanej przez użytkownika.

Mam nadzieję, że to ma sens.

Uzzar
źródło
1
Dla simple_form_forThe hiddenmetoda z użyciem tutaj ma zamiar podnieść błąd undefined method ukryty”dla # <SimpleForm :: FormBuilder: 0x00007ffa6cde0be8>`
Kiry pomiarowy