159

¿Cómo se puede tener un campo oculto con forma simple?rails simple_form - campo oculto - crear?

El siguiente código:

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

resultados en este error:

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

Respuesta

281

probar esto

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

Gracias, eso funcionó. '= f.input: title,: as =>: hidden,: input_html => {: value =>" some value "}' – Oleander

+5

Esta es la forma 'simple_form' de hacer entradas ocultas, sin embargo, si solo hay una entrada oculta es necesario, entonces simplemente use el creador de formularios '' hidden_field' de Rails ya que Simple Form hereda todos los métodos de creación de formularios. – scarver2

259

más corta embargo !!!

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

Más corto, DRYer y quizás más obvio.

Por supuesto con Ruby 1.9 y el nuevo formato de hash podemos ir 3 caracteres más corto con ...

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

O <% = f.hidden_field: term_id,: value => @ transaction.term_id%> – mirap

+1

Esta debería ser la respuesta aceptada. A pesar de que la pregunta sobre la forma simple, no hay razón para usarla cuando esto logra exactamente lo mismo con una sintaxis más corta. – gregblass

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

es también una opción. Sin embargo, tenga en cuenta que omite cualquier contenedor definido para su generador de formularios.

6

manera correcta (si usted no está tratando de restablecer el valor de la entrada hidden_field) es:

f.hidden_field :method, :value => value_of_the_hidden_field_as_it_comes_through_in_your_form 

Dónde :method es el método que cuando pidió a los resultados de objeto en el valor que desea

Así pues, siguiendo el ejemplo anterior:

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

el código utilizado en el ejemplo se restablecerá el valor (: título) de @movie que se pasa por la forma. Si necesita acceder al valor (Título) de una película, en lugar de ponerlo a cero, hacer esto:

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

Una vez más solamente usar mi respuesta es que no desea restablecer el valor enviado por el usuario .

Espero que esto tenga sentido.