Mendorong Validasi Rails ke Database?

Pernah membuka konsol Rails untuk men-debug masalah dan bertanya-tanya bagaimana datanya menjadi begitu funky? Terlepas dari upaya terbaik kami, database akan menerima banyak data sampah jika Anda membiarkannya. Ada banyak sekali metode untuk melewati callback dan validasi Rails sambil tetap memperbarui database Anda. Jika Anda seperti saya, Anda mungkin telah menggunakan metode ini di konsol Rails untuk memperbaiki beberapa data funky yang Anda temukan setelah beberapa kode lain membuatnya di tempat pertama.

Validasi Rekaman Aktif adalah tempat yang baik untuk mulai mencegah funk. Mereka akan memeriksa atribut untuk kehadiran, ketidakhadiran, numerikalitas, panjang, inklusi, format, pengecualian, penerimaan, dan banyak lagi. Anda dapat memvalidasi data model Anda dengan mudah dan mencegah sejumlah kesalahan umum dengan cara ini. Itu bukanlah akhir dari masalah tetapi untuk sebagian besar data yang funky, Anda melihat pikiran Anda harus memeriksa validasi dan mungkin menulis yang lain.

Namun, dalam aplikasi yang lebih kompleks, data dapat masuk melalui API atau impor Excel yang ditulis langsung ke database. Ini dapat dilakukan tanpa membuat model di tempat pertama melalui penyisipan karena pembuat kode merasa dia tahu apa yang dia lakukan (ketika mungkin dia tidak sebaik yang dia pikirkan. Itu terjadi pada yang terbaik dari kita.) ke DB bisa terjadi setelah model dimuat dan diperbarui melalui #update_all atau save(validate: false) . Dalam kedua kasus tersebut, kode tersebut mungkin benar-benar tepat pada saat itu dan bahkan mungkin telah diuji dengan baik dan mungkin masih menyebabkan masalah di kemudian hari. Perangkat lunak lunak dan model serta validasinya dapat berubah.

Contoh

Terkadang Anda perlu mendorong validasi Rails ke database. Cukup mudah untuk dilakukan dalam migrasi:

Jika Anda tidak yakin apakah database saat ini menerapkan validasi ini, Anda dapat check in db/schema.rb:

Ini akhirnya berarti bahwa ada beberapa tempat yang memeriksa validitas data yang masuk ke database yang mungkin keluar saat Anda melakukan pekerjaan ganda. Saya yakin Anda, seperti saya, masuk ke pengkodean untuk mengotomatiskan berbagai hal dan membiarkan komputer menggandakan pekerjaan, bukan Anda. Namun, tidak apa-apa melihat bahwa validasi model Rails juga melakukan lebih dari sekadar validasi ketat dan dapat digunakan untuk melewatkan kesalahan kepada pengguna dan memberi mereka konteks tentang apa yang salah tentang entri data mereka. Sebaliknya, kendala basis data sering kali mencegah penyisipan data yang salah akibat metode yang lebih terprogram yang berarti Anda dan rekan kerja Anda tidak terlalu tersandung. Jadi masing-masing dapat memiliki tujuan yang sangat berbeda meskipun permukaannya mirip.

Kesimpulan

Untuk menyelesaikan setiap validasi tidak perlu tinggal di database. Tidak setiap batasan database akan memberikan nilai atau bahkan cocok dengan validasi model. Tip yang bisa diambil untuk memulai adalah dengan melihat-lihat db/schema.rb dan temukan kolom yang harus berupa null: false atau memiliki nilai default dan tulis migrasi untuk itu. Mereka mudah dan mencegah null dan memiliki default yang baik akan menghemat masalah dalam mengarungi semua jenis data yang buruk nanti.