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.