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?

Daniel D
sumber
Bagaimana dengan mengubah tanda jawaban yang diterima ?
JJD

Jawaban:

221

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

gbc
sumber
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.

gunit888
sumber
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.

Jakub Hampl
sumber
4

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

Shreyas
sumber
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