rails simple_form - campo nascosto - creare?


174

Come puoi avere un campo nascosto con una forma semplice?

Il seguente codice:

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

provoca questo errore:

undefined method `hidden' for #SimpleForm::FormBuilder:0x000001042b7cd0

Risposte:


309

prova questo

= f.input :title, :as => :hidden, :input_html => { :value => "some value" }

8
Grazie, ha funzionato. = f.input :title, :as => :hidden, :input_html => { :value => "some value" }
Linus Oleander,

5
Questo è il simple_formmodo di fare input nascosti, tuttavia, se è necessario solo un input nascosto, usa semplicemente il hidden_fieldform builder di Rails poiché Simple Form eredita tutti i metodi del form builder.
scarver2

281

Il più corto ancora !!!

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

Più corto, più secco e forse più evidente.

Naturalmente con ruby ​​1.9 e il nuovo formato hash possiamo abbreviare di 3 caratteri con ...

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

1
Oppure <% = f.hidden_field: term_id,: value => @
action.term_id

2
Questa dovrebbe essere la risposta accettata. Anche se la domanda è posta sulla forma semplice, non c'è motivo di usarla quando questo realizza esattamente la stessa cosa con una sintassi più breve.
Greg Blass,

5
= f.input_field :title, as: :hidden, value: "some value"

È anche un'opzione. Si noti, tuttavia, che salta qualsiasi wrapper definito per il generatore di moduli.


5

Il modo corretto (se non si sta tentando di ripristinare il valore dell'input hidden_field) è:

f.hidden_field :method, :value => value_of_the_hidden_field_as_it_comes_through_in_your_form

Dov'è :method il metodo che quando viene chiamato sull'oggetto risulta nel valore desiderato

Quindi seguendo l'esempio sopra:

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

Il codice utilizzato nell'esempio reimposterà il valore (: titolo) di @movie passato dal modulo. Se è necessario accedere al valore (: titolo) di un film, anziché ripristinarlo, procedere come segue:

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

Usa di nuovo solo la mia risposta se non vuoi reimpostare il valore inviato dall'utente.

Spero che abbia senso.


1
Per simple_form_for, il hiddenmetodo che utilizza qui undefined method genererà un errore nascosto 'per # <SimpleForm :: FormBuilder: 0x00007ffa6cde0be8> `
Kiry Meas
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.