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.