Gunakan form_for Rails tetapi setel kelas khusus, atribut pada elemen <form>?

91

form_fortampaknya mengabaikan atribut 'ekstra' seperti data-fooatribut atau classditeruskan seperti optionspada argumen kedua.

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

Keluarannya adalah <form>tag tanpa xkelas atau data-baratribut.

Apa perbaikannya?

Atau, bagaimana cara mengambil FormBuilderinstance tanpa menggunakan form_for?

Alan H.
sumber

Jawaban:

194

Gunakan :htmlhash:

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

Atau

= form_for @user, html: {class: 'x', data: { bar: 'baz' } } do |f|
MurifoX
sumber
1
Saya menemukan bahwa ini tidak bekerja: = form_for @user, :html => {'class' => 'x'} do |f|. classharus menjadi simbol, bukan string.
Trantor Liu
11

Rails 4.0.3, Ruby 2.1.0p0 -> ini berhasil untuk saya =>

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

Saya memiliki masalah yang sama tetapi bingung karena formulir lain di tempat lain di aplikasi saya berfungsi dengan baik.

Saya menyadari bahwa saya tidak sengaja menambahkan form_for di dalam form_for lain yang pernah menghapusnya, menyembuhkan masalah.

Kedua, saya harus menambahkan bahwa sintaks ini berfungsi untuk saya di Rails 4.2:

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

Saya merasa lebih baik daripada sup tanda baca dari jawaban lain di sini (yang mungkin didasarkan pada versi Rails yang lebih lama).

MSC
sumber
1

Pada kebanyakan helper, argumen terakhir adalah hash opsi html untuk elemen tersebut.

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

Anda juga dapat memeriksa alternatif lain dalam dokumentasi ActionsView :: Helpers :: FormHelper

felipeclopes
sumber
1

Saya mencoba cara di atas tetapi tidak berhasil tetapi menemukan solusinya. Saya menggunakan rel 4.1.6.

Ini tidak berhasil

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

Ini berhasil

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

perhatikan perbedaannya dengan opsi html, semoga ini membantu

doz87
sumber
3
Wow benarkah? itu harus sama persis. Anda dapat mereproduksi ini? Versi Ruby mana yang Anda gunakan?
Alan H.
@Alan H. Menggunakan Ruby 2.1.3p242 = form_for(:user, :url => login_path, html: {:class => 'login_form'}) do |f| %> Ini adalah satu-satunya cara kode saya akan menerapkan kelas, jika tidak maka akan diabaikan saja.
doz87
Kedua garis itu persis sama. Menebak Anda lupa menyimpan di antaranya?
nathanvda
Aku tahu, seharusnya begitu. Bagi saya itu tidak berhasil. Menyimpan bukanlah masalahnya.
doz87