Bidang email:
<label for="job_client_email">Email: </label>
<input type="email" name="job[client_email]" id="job_client_email">
terlihat seperti ini:
Tetapi, jika validasi email gagal, itu menjadi:
<div class="field_with_errors">
<label for="job_client_email">Email: </label>
</div>
<div class="field_with_errors">
<input type="email" value="wrong email" name="job[client_email]" id="job_client_email">
</div>
yang terlihat seperti ini:
Bagaimana saya bisa menghindari perubahan penampilan ini?
ruby-on-rails
ruby-on-rails-3
validation
field-with-errors
Misha Moroshko
sumber
sumber
Jawaban:
Anda harus mengganti
ActionView::Base.field_error_proc
. Saat ini didefinisikan sebagai ini di dalamActionView::Base
:Anda bisa menimpanya dengan meletakkan ini di kelas aplikasi Anda di dalam
config/application.rb
:Mulai ulang server rel agar perubahan ini diterapkan.
sumber
label
daninput
yang dibungkus? Bagaimana Rails memutuskan apa yang akan dibungkus?f.label :password
danf.password_field :password
di@resource.errors
sana akan ada[:password]
set kesalahan.Perbedaan visual yang Anda lihat terjadi karena
div
elemen tersebut adalah elemen blok. Tambahkan gaya ini ke file CSS Anda untuk membuatnya berperilaku seperti elemen inline:sumber
display:
properti apa pun yang digunakan (dan gaya tata letak lainnya) dihtml_tag
.display
properti yang digunakan sebelum css ini ditambahkan yaitublock
yang menyebabkan perbedaan visual yang tidak diinginkan. Itu tidak meniadakan gaya tata letak lain pada tag. Namun, jawaban Ryan Bigg sempurna jika Anda ingin mengubah / menghapus tag yang membungkus bidang dengan kesalahan.Saat ini saya menggunakan solusi ini, ditempatkan di penginisialisasi:
Ini memungkinkan saya untuk hanya menambahkan nama kelas ke tag yang sesuai, tanpa membuat elemen tambahan.
sumber
label
.Kode tambahan sedang ditambahkan oleh
ActionView::Base.field_error_proc
. Jika Anda tidak menggunakanfield_with_errors
untuk membuat gaya formulir Anda, Anda dapat menimpanya diapplication.rb
:Atau, Anda dapat mengubahnya ke sesuatu yang sesuai dengan UI Anda:
sumber
Saya bekerja dengan Rails 5 dan Materialize-Sass dan saya mendapatkan beberapa masalah dengan perilaku default dari Rails untuk menangani validasi bidang yang gagal seperti pada gambar di bawah ini dan itu karena tambahan yang
div
ditambahkan ke bidang input di mana validasi gagal.Bekerja dengan @Phobetron menjawab dan memodifikasi jawaban Hugo Demiglio juga. Saya membuat beberapa penyesuaian pada blok kode tersebut dan saya mendapatkan sesuatu yang berfungsi dengan baik dalam kasus-kasus berikut:
input
danlabel
memilikiclass
atribut sendiri di mana saja<input type="my-field" class="control">
<label class="active" for="...">My field</label>
input
ataulabel
tidak memilikiclass
atribut<input type="my-field">
<label for="...">My field</label>
label
tag memiliki tag lain di dalam denganclass attribute
<label for="..."><i class="icon-name"></i>My field</label>
Dalam semua kasus tersebut,
error
kelas akan ditambahkan ke kelas yang ada diclass
atribut jika ada atau akan dibuat jika tidak ada dalam label atau tag input .Saya berharap ini bisa bermanfaat bagi seseorang dengan kondisi yang sama seperti saya.
sumber
Selain jawaban @ phobetron, yang tidak berfungsi saat Anda memiliki tag lain dengan atribut kelas, seperti
<label for="..."><i class="icon my-icon"></i>My field</label>
.Saya melakukan beberapa perubahan pada solusinya:
sumber
Jika karena alasan tertentu Anda masih mengerjakan Rails 2 (seperti saya), periksa pos SO di sini .
Ia menawarkan skrip untuk dimasukkan ke inisialisasi.
sumber
Satu hal yang perlu diingat (seperti yang saya temukan saat mengerjakan ini hari ini) adalah bahwa jika Anda mengapungkan bidang label atau input (saya mengapungkan semua bidang input dengan benar), css akan pecah bahkan jika Anda menimpa ActionView :: Base.field_error_proc.
Alternatifnya adalah dengan menurunkan level lebih dalam pada format CSS seperti:
sumber
Saya membuat pilihan untuk menonaktifkan hal mengerikan ini untuk beberapa objek
Jadi bisa menggunakannya seperti ini:
sumber
Ini adalah solusi saya membangun di atas jawaban @ Phobetron. Menempatkan kode ini di
application.rb
, tag Anda<p>
dan yang<span>
dihasilkan olehform.error :p
panggilan yang sesuai akan menerimafields_with_errors
tag css. Sisanya akan menerimaerror
kelas CSS.Saya menemukan cara ini yang paling fleksibel dan tidak mencolok dari semua sebelumnya untuk gaya respons di formulir saya.
sumber
Jika itu hanya untuk keperluan penataan (Anda tidak keberatan
div
), Anda bisa menambahkan ini ke css Anda:The
div
akan bertindak sepertispan
dan itu tidak akan mengganggu desain Anda (karenadiv
merupakan elemen blok -display: block;
- secara default, maka akan menyebabkan baris baru setelah itu menutup,span
adalahinline
, sehingga tidak).sumber
Jika Anda hanya ingin mematikan kesalahan untuk elemen tertentu, misalnya kotak centang , Anda dapat melakukan ini:
sumber
Jika hanya tentang masalah gaya, kita dapat menimpa "field_with_errors". Tapi karena itu mungkin mempengaruhi formulir lain di aplikasi kita, lebih baik menimpa kelas "field_with_errors" dengan hanya dalam bentuk itu.
Mempertimbangkan 'parent_class' adalah salah satu kelas induk untuk bidang kesalahan formulir (baik kelas formulir atau kelas elemen induk mana pun untuk bidang kesalahan), lalu
Itu akan memperbaiki masalah juga, itu tidak akan mengganggu bentuk lain dalam aplikasi kami juga.
ATAU
Jika kita perlu mengganti gaya "field_with_errors" untuk seluruh aplikasi, maka seperti yang dikatakan @dontangg,
akan melakukan perbaikan. Semoga bermanfaat :)
sumber
Jika Anda tidak ingin mengubah
field_error_proc
seluruh aplikasi Anda, buka jQuery dapat memberikan solusi yang lebih bertarget untuk area masalah tertentu, misalnya,sumber