Erreur de fusion du champ masqué Rails, méthode non définie

152

Je veux faire quelque chose comme ça dans les rails

Voici ce que j'ai jusqu'à présent dans les rails:

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

Mais alors j'obtiens cette erreur:

undefined method `merge' for "test":String

Comment puis-je transmettre des valeurs dans mon hidden_field dans les rails?

Jake
la source
64
Accepteriez-vous une réponse?
apneadiving

Réponses:

417

Tu devrais faire:

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

hidden_field attend un hachage comme deuxième argument

apnée
la source
9
C'est un peu incohérent, car nous écrivons également <%= hidden_field_tag :service, "test" %>lorsque nous n'utilisons pas form_for |f|...
Augustin Riedinger
55

Vous utilisez un hidden_field au lieu d'un hidden_field_tag. Étant donné que vous utilisez la version non _tag, il est supposé que votre contrôleur a déjà défini la valeur de cet attribut sur l'objet qui soutient le formulaire. Par exemple:

manette:

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

vue:

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

Cela fonctionne bien dans Ruby 1.9 et rails 4

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

Une version avec la nouvelle syntaxe pour les hachages dans ruby ​​1.9:

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

Cela fonctionne également dans Rails 3.2.12:

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

bradmalloy
la source
0

Au fait, je n'utilise pas de champs cachés pour envoyer des données de serveur à navigateur. Les attributs de données sont géniaux. Tu peux faire

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

Et puis obtenez la valeur d'attribut avec jquery

$('form').data('service')
Alex Teut
la source