Rails 3 özel doğrulayıcı nerede saklanmalıdır?


94

Belgelerin / web sitelerinin, özel doğrulayıcıların bir projenin /libveya /lib/validatorsdizinine gitmesi gerektiğini gösterdiğini gördüm . (Başka bir gönderinin cevabını okuyarak) sadece içinde çalışıyor gibi göründüklerini buldum config/initializers. Özel doğrulayıcıların nerede yaşaması gerektiğini gösteren resmi belgeleri bilen veya gösteren var mı?


Yanıtlar:


221

Özel doğrulayıcılarınızı yerleştirirseniz app/validators, config/application.rbdosyanızı değiştirmenize gerek kalmadan otomatik olarak yüklenirler .


Bunun için eklemeniz gereken bazı taş / yapılandırma var mı bilmiyorum, ancak 3.2.8 raylar altında bu işe yaramıyor. Özellikle, doğrulayıcınızı uygulama / doğrulayıcılara / ???. Rb'ye bırakmanız yeterli değildir.
Doug

17
Doug doğrulayıcı sınıfı adında fakat altını olan doğrulayıcı dosyası aynı şekilde isim deneyin: MyCoolValidator app gider / doğrulayıcılar / my_cool_validator.rb
equivalent8

14
@Doug sunucunuzu yeniden başlatmanız gerekiyor. Otomatik yükleme yolları, başlatma sırasında genişletilir, böylece yeni alt klasörler siz bunu yapana kadar alınmayacaktır.
Timo

Ayrıca, yeni doğrulamam için bir yardımcı eklemek için ActiveModel :: Validations :: HelperMethods'u monkeypatch yapmayı seviyorum (örneğin, AddressValidator için validates_address). Hem monkeypatch'i hem de Validator'ı app / validators / address_validator.rb'ye dahil ettiğimde monkeypatch değil, yalnızca AddressValidator nesnesi yüklenir. Aynı davranışı mı yaşıyorsunuz?
jshkol

1
spring stopBenim için Rails 5.2'de gerekliydi, aksi takdirde alınmadı.
Jack Kinsella

15

Bunu /config/application.rb dosyanıza eklerseniz:

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

Ardından Rails, doğrulayıcılarınızı başlangıçta otomatik olarak yükler (tıpkı / config / initializers / gibi), ancak doğrulayıcılarınızı güzel, iyi adlandırılmış bir noktada bulundurmanın temiz yapısını korursunuz.


9
İyi fikir ama kodunuzun biraz temizlenmesi gerekiyor: config.autoload_paths += %W(#{config.root}/lib/validators/)
aNoble

6

lib/validatorsaçık ara en temiz görünüyor. Ancak, bunları modellerinizden önce yüklemeniz gerekebilir, yani muhtemelen bir başlatıcıdan.


4

İşte özel doğrulamalarla ilgili resmi belgeler . AFAIK, onları ilgili modellerde tutmak için iyi bir uygulamadır.


5
Birden fazla model için geçerli olmadıkları sürece, bu durumda onları başka bir yerde KURU kalmaları için saklamalısınız.
Andrew Marshall

Muhtemelen öyledir çünkü aksi halde onlar için ayrı bir sınıf yaratmanın çok az anlamı vardır.
Jakub Hampl

7
@Jakub Evet var: Tek Sorumluluk İlkesi
mattwynne

2
Resmi belgelerle bağlantı koptu. İşte bu belgelerin şu anki konumu; guides.rubyonrails.org/…
Stijnster
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.