web-dev-qa-db-fra.com

Rails méthode non définie dans le champ masqué 'erreur de fusion'

Je veux faire quelque chose comme ça dans Rails

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

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

Mais alors je reçois cette erreur:

undefined method `merge' for "test":String

Comment puis-je transmettre des valeurs dans mon champ caché dans des rails?

150
Jake

Tu devrais faire:

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

hidden_field attend un hash comme second argument

412
apneadiving

Vous utilisez un hidden_field au lieu d'un hidden_field_tag. Comme vous utilisez une version autre que _tag, il est supposé que votre contrôleur a déjà défini la valeur de cet attribut sur l'objet qui sauvegarde 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 %>
55
user132447

Cela fonctionne très bien dans Ruby 1.9 & Rails 4

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

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

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

Cela fonctionne aussi dans Rails 3.2.12:

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

2
bradmalloy

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

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

Et puis obtenir la valeur d'attribut avec jQuery

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