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?


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


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 %>

27

Es funktioniert gut in Ruby 1.9 & Rails 4

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

3

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

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

2

Dies funktioniert auch in Rails 3.2.12:

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


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')
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.