rails simple_form - campo oculto - ¿crear?

174

¿Cómo puedes tener un campo oculto con forma simple?

El siguiente código:

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

da como resultado este error:

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

Respuestas:

309

prueba esto

= f.input :title, :as => :hidden, :input_html => { :value => "some value" }
fl00r
fuente
8
Gracias, eso funcionó. = f.input :title, :as => :hidden, :input_html => { :value => "some value" }
Linus Oleander
55
Esta es la simple_formforma de hacer entradas ocultas, sin embargo, si solo se necesita una entrada oculta, simplemente use el hidden_fieldgenerador de formularios de Rails, ya que Simple Form hereda todos los métodos del generador de formularios.
scarver2
281

Más corto aún!

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

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

Por supuesto, con ruby ​​1.9 y el nuevo formato hash podemos ir 3 caracteres más cortos con ...

=f.hidden_field :title, value: "some value"
Michael Durrant
fuente
1
O <% = f.hidden_field: term_id,: valor => @ transacción.term_id%>
mirap
2
Esta debería ser la respuesta aceptada. Aunque la pregunta se hizo sobre la forma simple, no hay ninguna razón para usarla cuando esto logra exactamente lo mismo con una sintaxis más corta.
Greg Blass
5
= f.input_field :title, as: :hidden, value: "some value"

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

Fuad Saud
fuente
5

La forma correcta (si no está intentando 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 está el método que cuando se llama al objeto da como resultado el valor que desea?

Entonces, 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 restablecerá el valor (: título) de @movie que pasa el formulario. Si necesita acceder al valor (: título) de una película, en lugar de restablecerlo, haga lo siguiente:

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

Nuevamente, solo use mi respuesta si no desea restablecer el valor enviado por el usuario.

Espero que esto tenga sentido.

Uzzar
fuente
1
Para simple_form_for, el hiddenmétodo que se usa aquí undefined method generará un error oculto 'para # <SimpleForm :: FormBuilder: 0x00007ffa6cde0be8> `
Kiry Meas