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.