rails simple_form - champ caché - créer?

174

Comment pouvez-vous avoir un champ caché avec un formulaire simple?

Le code suivant:

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

entraîne cette erreur:

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

Réponses:

309

essaye ça

= f.input :title, :as => :hidden, :input_html => { :value => "some value" }
fl00r
la source
8
Merci, cela a fonctionné. = f.input :title, :as => :hidden, :input_html => { :value => "some value" }
Linus Oleander
5
C'est la simple_formmanière de faire des entrées cachées, cependant, si seulement une entrée cachée est nécessaire, alors utilisez simplement le hidden_fieldgénérateur de formulaire de Rails car Simple Form hérite de toutes les méthodes du générateur de formulaire.
scarver2
281

Le plus court encore !!!

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

Plus court, plus sec et peut-être plus évident.

Bien sûr, avec ruby ​​1.9 et le nouveau format de hachage, nous pouvons raccourcir 3 caractères avec ...

=f.hidden_field :title, value: "some value"
Michael Durrant
la source
1
Ou <% = f.hidden_field: term_id,: value => @ transaction.term_id%>
mirap
2
Cela devrait être la réponse acceptée. Même si la question posée sur la forme simple, il n'y a aucune raison de l'utiliser lorsque cela accomplit exactement la même chose avec une syntaxe plus courte.
Greg Blass
5
= f.input_field :title, as: :hidden, value: "some value"

Est également une option. Notez, cependant, qu'il ignore tout wrapper défini pour votre générateur de formulaire.

Fuad Saud
la source
5

La manière correcte (si vous n'essayez pas de réinitialiser la valeur de l'entrée hidden_field) est:

f.hidden_field :method, :value => value_of_the_hidden_field_as_it_comes_through_in_your_form

:method est la méthode qui, lorsqu'elle est appelée sur l'objet, donne la valeur souhaitée

Donc en suivant l'exemple ci-dessus:

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

Le code utilisé dans l'exemple réinitialisera la valeur (: title) de @movie passée par le formulaire. Si vous devez accéder à la valeur (: title) d'un film, au lieu de le réinitialiser, procédez comme suit:

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

Encore une fois, n'utilisez que ma réponse: vous ne souhaitez pas réinitialiser la valeur soumise par l'utilisateur.

J'espère que cela a du sens.

Uzzar
la source
1
Car simple_form_for, la hiddenméthode utilisant ici va générer une erreur undefined method cachée 'for # <SimpleForm :: FormBuilder: 0x00007ffa6cde0be8> `
Kiry Meas