Verwenden Sie form_for von Rails, aber legen Sie benutzerdefinierte Klassen und Attribute für das <form> -Element fest.


88

form_forscheint alle 'zusätzlichen' Attribute wie ein data-fooAttribut zu ignorieren oder classwie optionsim zweiten Argument übergeben.

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

Die Ausgabe ist ein <form>Tag ohne xKlasse oder data-barAttribut.

Was ist das Problem?

Oder wie kann ich eine FormBuilderInstanz abrufen, ohne sie zu verwenden form_for?

Antworten:


190

Verwenden Sie den :htmlHash:

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

Oder

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

1
Ich habe festgestellt, dass dies nicht funktioniert : = form_for @user, :html => {'class' => 'x'} do |f|. classsollte ein Symbol anstelle einer Zeichenfolge sein.
Trantor Liu

11

Rails 4.0.3, Ruby 2.1.0p0 -> das hat bei mir funktioniert =>

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

4

Ich hatte das gleiche Problem, war aber verwirrt, dass ein anderes Formular an anderer Stelle in meiner App einwandfrei funktionierte.

Mir wurde klar, dass ich versehentlich ein form_for in ein anderes form_for eingefügt hatte, das das Problem nach dem Entfernen behoben hatte .

Zweitens sollte ich hinzufügen, dass diese Syntax in Rails 4.2 für mich funktioniert:

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

Ich finde es der Interpunktionssuppe der anderen Antworten hier vorzuziehen (die vielleicht auf einer älteren Rails-Version basierten).



1

Ich habe das oben genannte ohne Glück versucht, aber eine Lösung gefunden. Ich benutze Schienen 4.1.6.

Das hat nicht funktioniert

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

Das hat es getan

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

Beachten Sie den Unterschied mit der HTML-Option, hoffe, dies hilft


3
Wow wirklich? diese sollten genau gleichwertig sein. Sie können dies reproduzieren? Welche Ruby-Version verwenden Sie?
Alan H.

@Alan H. Verwenden von Ruby 2.1.3p242 = form_for(:user, :url => login_path, html: {:class => 'login_form'}) do |f| %> Dies war die einzige Möglichkeit, mit der mein Code die Klasse anwenden würde, andernfalls wurde er nur ignoriert.
doz87

Diese beiden Zeilen sind genau identisch. Vermutlich haben Sie vergessen, zwischendurch zu sparen?
Nathanvda

Ich weiß, das sollten sie sein. Für mich hat es einfach nicht funktioniert. Sparen war nicht das Problem.
doz87
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.