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?

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|

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? %>

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).



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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.