Yukihiro "Matz" Matsumoto

Often people, especially computer engineers, focus on the machines. They think, "By doing this, the machine will run fast. By doing this, the machine will run more effectively. By doing this, the machine will something something something." They are focusing on machines. But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. We are the masters. They are the slaves.
Yukihiro "Matz" Matsumoto, Creator of Ruby

Kamis, 30 Oktober 2014

Implementasi Custom Validator Pada Model Rails

Validasi merupakan hal yang paling fundamental dalam model objek Rails anda, apabila anda tidak menggunakan validasi dengan baik, maka data di dalam tabel database anda akan dipenuhi dengan inkonsistensi. User dapat menginput data yang tidak sesuai dengan keinginan anda pada saat melakukan pengisian dalam form dan tidak mendapatkan peringatan apa-apa.

Pada kesempatan kali ini, saya ingin berbagi tips dalam melakukan impelementasi kustom validator. Rails memberikan banyak sekali validasi yang dapat anda gunakan seperti presence, length, numericaliy, inclusion, format. Ada kalanya anda ingin membuat sendiri validasi kustom yang dapat anda gunakan dalam melakukan validasi pada model.

Sebagai contoh misalnya anda ingin melakukan validasi pada nomor telepon dengan format "0411-3611419". Apabila user memasukkan nomor telepon dengan format 04113611419 maka validasi akan gagal. Dengan menggunakan kustom validasi, kita dapat menetapkan validasi sesuai dengan kondisi yang kita inginkan.

Pertama-tama dibuat terlebih dahulu file berisi validator yang akan kita gunakan. Pada contoh ini file-file validator ditempatkan didalam folder apps/validators. Folder ini tidak secara default dibuat oleh Rails, sehingga anda harus membuatnya sendiri. Dalam folder ini, akan diisi file berisi custom validator yang akan kita buat.



Untuk dapat mengatur agar Rails melakukan load ke dalam path validators ini, perlu anda tambahkan kode ke dalam config/application.rb agar Rails menambahkan path tersebut pada saat melakukan loading.

config.autoload_paths += %W("#{config.root}/app/validators")

Selanjutnya di dalam file yang akan kita jadikan validator, kita isi kode yang akan menjadi validator custom yang akan kita buat. Penamaan dari validator ini cukup krusial, format yang digunakan adalah "NameValidator" dimana name merupakan nama validator yang akan kita pakai. Sebagai contoh disini nama validator yang akan dipakai adalah phone, sehingga penamaan kelasnya menggunakan PhoneValidator.

Class PhoneValidator < ActiveRecord::EachValidator

  def validate_each(record, attribute, value)
    if not value =~ /\b[0-9]{3,4}-[0-9]{7,12}\b/
      record.errors[attribute] << (options[:message] || "Please input valid Indonesian telephone number")
    end
  end
end

Cusom validator ini menggunakan inheritansi dari kelas ActiveRecord::EachValidator sebagai kelasnya. Kemudian digunakan method validate_each dengan argumen berupa record, attribute, dan value. Di dalamnya digunakan if condition dimana bila value tidak memenuhi syarat dari regex maka akan terjadi kegagalan dalam validasi dan kemudian akan diberikan pesan error ke dalam objek.

Setelah proses ini selesai, anda dapat mengimplementasikan custom validator ini kedalam model objek anda seperti contoh dibawah ini.


Selanjutnya untuk melakukan test secara dapat, anda dapat membuka rails console melalui command-line untuk melakukan pengecekan secara langsung.


Pada kode di atas, telephone diberikan nilai dengan string "xxx" yang merupakan format yang salah untuk dilakukan pengecekan apakah validasi error berhasil dijalankan. Dari hasil yang didapat terlihat bahwa validasi berhasil dilakukan dengan melihat pesan errors dengan key telephone. Selanjutnya dilakukan koreksi dengan format telepon yang benar, dan dilakukan validasi. Dapat dilihat bahwa pesan error sudah tidak ada kareana validasi yang dilakukan telah berhasil dan memenuhi syarat.

Semoga tips ini bermanfaat bagi anda. Happy Railings!!!

1 komentar:

  1. Lucky Club: Online Casino Site - Lucky Club Live
    Lucky Club's latest games and promos – luckyclub no download! Sign Up, deposit €25, Win £10 or more and claim your bonus and play with no download.

    BalasHapus