web-dev-qa-db-fra.com

Utilisez form_for de Rails mais définissez des classes personnalisées, des attributs sur l’élément <form>?

form_for semble ignorer les attributs "supplémentaires" comme un data-foo attribut ou class passé en tant que options dans son deuxième argument.

= form_for @user, {:url => 'foo', :class => 'x', 'data-bar' => 'baz' } do |f|
  # ...

La sortie est un <form>tiquette sans x classe ou data-bar attribut.

Quelle est la solution?

Ou, comment puis-je récupérer une instance FormBuilder sans utiliser form_for?

83
Alan H.

Utilisez le :html hash:

= form_for @user, :html => {:class => 'x', 'data-bar' => 'baz'} do |f|

Ou

= form_for @user, :html => {class: 'x', data: { bar: 'baz' } } do |f|
179
MurifoX

Rails 4.0.3, Ruby 2.1.0p0 -> cela a fonctionné pour moi =>

<%= form_for(@contact, :html => {:class => 'form_height'}) do |f| %><% if     @contact.errors.any? %>
11
zero_cool

J'avais le même problème, mais j'étais perplexe qu'un autre formulaire ailleurs dans mon application fonctionne bien.

Je me suis rendu compte que j'avais accidentellement ajouté un form_for dans un autre form_for qui, une fois retiré, résolvait le problème.

Deuxièmement, je devrais ajouter que cette syntaxe fonctionne pour moi dans Rails 4.2:

<%= form_for @type, html: {class: "form-horizontal"} do |f| %>

Je trouve cela préférable à la ponctuation-soupe des autres réponses ici (qui étaient peut-être basées sur une version plus ancienne Rails)).

4
MSC

Sur la plupart des helpers, le dernier argument est un hachage d’options HTML pour l’élément.

= form_for @user, :html => {:class => 'x', 'data-bar' => 'baz'} %>

Vous pouvez également vérifier d'autres alternatives dans la documentation ActionsView :: Helpers :: FormHelper

1
felipeclopes

J'ai essayé ce qui précède sans succès mais j'ai trouvé une solution. J'utilise Rails 4.1.6.

Cela n'a pas fonctionné

= form_for @user, :html => {:class => 'x', 'data-bar' => 'baz'} %>

Cela fait

= form_for @user, html: {:class => 'x', 'data-bar' => 'baz'} %>

remarquez la différence avec l'option html, espérons que cela vous aidera

1
doz87