Di mana seharusnya validator khusus Rails 3 disimpan?


94

Saya telah melihat dokumen / situs web menunjukkan bahwa validator khusus harus masuk ke direktori /libatau /lib/validatorsproyek. Saya telah menemukan (dengan membaca jawaban untuk posting lain) bahwa mereka sepertinya hanya berfungsi config/initializers. Adakah yang tahu, atau memiliki petunjuk ke dokumentasi resmi yang menunjukkan di mana validator kustom harus tinggal?


Jawaban:


221

Jika Anda menempatkan validator khusus Anda di dalamnya, app/validatorsmereka akan dimuat secara otomatis tanpa perlu mengubah config/application.rbfile Anda .


Saya tidak tahu apakah ada gem / config yang perlu Anda tambahkan untuk ini, tetapi di bawah rel 3.2.8 ini tidak berfungsi. Secara khusus, cukup dengan meletakkan validator Anda ke app / validators / ???. Rb tidak akan berfungsi.
Doug

17
Doug mencoba memberi nama file validator dengan cara yang sama dengan kelas validator diberi nama tetapi digarisbawahi: MyCoolValidator pergi ke app / validators / my_cool_validator.rb
equivalent8

14
@Doug Anda perlu me-restart server Anda. Jalur muat otomatis diperluas saat inisialisasi sehingga subfolder baru tidak akan diambil sampai Anda melakukannya.
Timo

Saya juga suka monkeypatch ActiveModel :: Validations :: HelperMethods untuk menambahkan penolong untuk validasi baru saya (misalnya validates_address untuk AddressValidator). Ketika saya menyertakan monkeypatch dan Validator di app / validators / address_validator.rb hanya objek AddressValidator yang dimuat, bukan monkeypatch. Apakah kalian mengalami perilaku yang sama?
jshkol

1
spring stopdiperlukan bagi saya di Rails 5.2, jika tidak maka tidak akan terangkat.
Jack Kinsella

15

Jika Anda menambahkan ini ke file /config/application.rb Anda:

config.autoload_paths += %W["#{config.root}/lib/validators/"]

Kemudian Rails akan secara otomatis memuat validator Anda saat start up (seperti / config / initializers /), tetapi Anda tetap menjaga struktur yang bersih dengan memiliki validator di satu tempat yang bagus dan dinamai baik.


9
Ide bagus tetapi kode Anda perlu config.autoload_paths += %W(#{config.root}/lib/validators/)
dibersihkan

6

lib/validatorstampaknya sejauh ini yang terbersih. Namun Anda mungkin perlu memuatnya sebelum model Anda, jadi mungkin dari penginisialisasi.


4

Berikut dokumen resmi tentang validasi kustom. AFAIK adalah praktik yang baik untuk mempertahankannya dalam model yang relevan.


5
Kecuali jika dapat diterapkan pada beberapa model, dalam hal ini Anda harus menyimpannya di tempat lain agar tetap KERING.
Andrew Marshall

Itulah yang mereka kira karena jika tidak ada gunanya membuat kelas terpisah untuk mereka.
Jakub Hampl

7
@Jakub Ya ada: Prinsip Tanggung Jawab Tunggal
mattwynne

2
Tautan ke dokumen resmi rusak. Berikut adalah lokasi terkini dari dokumentasi tersebut; guides.rubyonrails.org/...
Stijnster
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.