Error oculto de método de fusión de carriles de campo oculto

152

Quiero hacer algo como esto en rieles

Esto es lo que tengo hasta ahora en rieles:

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

Pero luego me sale este error:

undefined method `merge' for "test":String

¿Cómo puedo pasar valores en mi hidden_field en rails?

Jake
fuente
64
¿Aceptarías una respuesta?
apneadiving

Respuestas:

417

Deberías hacer:

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

hidden_field espera un hash como segundo argumento

apneadiving
fuente
9
Es un poco inconsistente ya que también escribimos <%= hidden_field_tag :service, "test" %>cuando no usamos form_for |f|...
Augustin Riedinger
55

Estás utilizando un hidden_field en lugar de un hidden_field_tag. Debido a que está utilizando la versión que no es _tag, se supone que su controlador ya ha establecido el valor para ese atributo en el objeto que respalda el formulario. Por ejemplo:

controlador:

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

ver:

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

Funciona bien en Ruby 1.9 y rails 4

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

Una versión con la nueva sintaxis para hashes en ruby ​​1.9:

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

Esto también funciona en Rails 3.2.12:

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

bradmalloy
fuente
0

Por cierto, no uso campos ocultos para enviar datos del servidor al navegador. Los atributos de datos son asombrosos. Tu puedes hacer

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

Y luego obtenga el valor del atributo con jquery

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