Rails verstecktes Feld undefinierte Methode 'Zusammenführen' Fehler

152

Ich möchte so etwas in Schienen machen

Folgendes habe ich bisher in Schienen:

<%= form_for @order do |f| %>
  <%= f.hidden_field :service, "test" %>
  <%= f.submit %>
<% end %>

Aber dann bekomme ich diesen Fehler:

undefined method `merge' for "test":String

Wie kann ich Werte in meinem hidden_field in Rails übergeben?

Jake
quelle
64
Würden Sie eine Antwort akzeptieren?
Apneadiving

Antworten:

417

Du solltest tun:

<%= f.hidden_field :service, :value => "test" %>

hidden_field erwartet einen Hash als zweites Argument

apneadiving
quelle
9
Es ist irgendwie inkonsistent, da wir auch schreiben, <%= hidden_field_tag :service, "test" %>wenn wir nicht verwenden form_for |f|...
Augustin Riedinger
55

Sie verwenden ein verstecktes_Feld anstelle eines versteckten_Feld_Tags. Da Sie die Nicht-Tag-Version verwenden, wird davon ausgegangen, dass Ihr Controller den Wert für dieses Attribut bereits für das Objekt festgelegt hat, das das Formular unterstützt. Beispielsweise:

Regler:

def new
  ...
  @order.service = "test"
  ...
end</pre>

Aussicht:

<%= form_for @order do |f| %>
  <%= f.hidden_field :service %>
  <%= f.submit %>
<% end %>
user132447
quelle
27

Es funktioniert gut in Ruby 1.9 & Rails 4

<%= f.hidden_field :service, value: "test" %>
Tushar.PUCSD
quelle
3

Eine Version mit der neuen Syntax für Hashes in Ruby 1.9:

<%= f.hidden_field :service, value: "test" %>
Michael Durrant
quelle
2

Dies funktioniert auch in Rails 3.2.12:

<%= f.hidden_field :service, :value => "test" %>

Bradmalloy
quelle
0

Ich verwende übrigens keine versteckten Felder, um Daten vom Server an den Browser zu senden. Datenattribute sind fantastisch. Du kannst tun

<%= form_for @order, 'data-service' => 'test' do |f| %>

Und dann mit jquery den Attributwert abrufen

$('form').data('service')
Alex Teut
quelle