Errore 'unione' del metodo indefinito del campo nascosto delle rotaie


152

Voglio fare qualcosa del genere su binari

Ecco quello che ho finora nelle rotaie:

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

Ma poi ottengo questo errore:

undefined method `merge' for "test":String

Come posso passare valori nel mio campo nascosto in rotaie?


64
Accetteresti una risposta?
Appuntamento l'

Risposte:


417

Dovresti fare:

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

hidden_field si aspetta un hash come secondo argomento


9
È un po 'incoerente poiché scriviamo anche <%= hidden_field_tag :service, "test" %>quando non si usa form_for |f|...
Augustin Riedinger

55

Stai utilizzando un campo nascosto anziché un campo nascosto. Poiché si utilizza la versione non _tag, si presume che il controller abbia già impostato il valore per quell'attributo sull'oggetto che supporta il modulo. Per esempio:

Controller:

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

Visualizza:

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

27

Funziona bene in Ruby 1.9 e rotaie 4

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

3

Una versione con la nuova sintassi per gli hash in ruby ​​1.9:

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

2

Questo funziona anche in Rails 3.2.12:

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


0

A proposito, non uso campi nascosti per inviare dati dal server al browser. Gli attributi dei dati sono fantastici. Tu puoi fare

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

E quindi ottenere il valore dell'attributo con jquery

$('form').data('service')
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.