Schienen simple_form - verstecktes Feld - erstellen?


174

Wie können Sie ein verstecktes Feld mit einfacher Form haben?

Der folgende Code:

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

führt zu diesem Fehler:

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

Antworten:


308

Versuche dies

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

8
Danke, das hat funktioniert. = f.input :title, :as => :hidden, :input_html => { :value => "some value" }
Linus Oleander

5
Dies ist die simple_formMöglichkeit, versteckte Eingaben vorzunehmen. Wenn jedoch nur eine versteckte Eingabe erforderlich ist, verwenden Sie einfach den hidden_fieldFormular-Builder von Rails, da Simple Form alle Methoden des Formular-Builders erbt.
Scarver2

281

Am kürzesten noch !!!

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

Kürzer, trockener und vielleicht offensichtlicher.

Natürlich können wir mit Ruby 1.9 und dem neuen Hash-Format 3 Zeichen kürzer machen mit ...

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

1
Oder <% = f.hidden_field: term_id ,: value => @ transaction.term_id%>
mirap

2
Dies sollte die akzeptierte Antwort sein. Obwohl die Frage nach der einfachen Form gestellt wird, gibt es keinen Grund, sie zu verwenden, wenn dies genau dasselbe mit einer kürzeren Syntax erreicht.
Greg Blass

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

Ist auch eine Option. Beachten Sie jedoch, dass alle für Ihren Form Builder definierten Wrapper übersprungen werden.


5

Der richtige Weg (wenn Sie nicht versuchen, den Wert der Hidden_field-Eingabe zurückzusetzen) ist:

f.hidden_field :method, :value => value_of_the_hidden_field_as_it_comes_through_in_your_form

Wo :method ist die Methode, die beim Aufruf des Objekts den gewünschten Wert ergibt?

Folgen Sie also dem obigen Beispiel:

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

Der im Beispiel verwendete Code setzt den Wert (: title) von @movie zurück, der vom Formular übergeben wird. Wenn Sie auf den Wert (: Titel) eines Films zugreifen müssen, anstatt ihn zurückzusetzen, gehen Sie folgendermaßen vor:

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

Verwenden Sie wieder nur meine Antwort, wenn Sie den vom Benutzer übermittelten Wert nicht zurücksetzen möchten.

Ich hoffe das macht Sinn.


1
Für simple_form_fordie hier verwendete hiddenMethode wird ein undefined method versteckter Fehler 'für # <SimpleForm :: FormBuilder: 0x00007ffa6cde0be8>'
Kiry Meas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.