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.