Dove devono essere archiviati i validatori personalizzati di Rails 3?


93

Ho visto documenti / siti Web che mostrano che i validatori personalizzati dovrebbero andare in una directory /libo /lib/validatorsdi un progetto. Ho scoperto (leggendo una risposta a un altro post) che sembrano funzionare solo config/initializers. Qualcuno lo sa o ha un puntatore alla documentazione ufficiale che mostra dove dovrebbero vivere i validatori personalizzati?


Risposte:


220

Se inserisci i tuoi validatori personalizzati app/validators, verranno caricati automaticamente senza bisogno di modificare il tuo config/application.rbfile.


Non so se c'è qualche gem / configurazione che devi aggiungere per questo, ma sotto rails 3.2.8 questo non funziona. In particolare, semplicemente trascinando il tuo validatore in app / validators / ???. Rb non funziona.
Doug

17
Doug prova a denominare il file di convalida nello stesso modo in cui è denominata la classe di convalida ma sottolineato: MyCoolValidator va su app / validators / my_cool_validator.rb
equivalente

14
@Doug è necessario riavviare il server. I percorsi di caricamento automatico vengono espansi durante l'inizializzazione in modo che le nuove sottocartelle non vengano raccolte finché non lo fai.
Timo

Mi piace anche monkeypatch ActiveModel :: Validations :: HelperMethods per aggiungere un helper per la mia nuova convalida (ad esempio validates_address per AddressValidator). Quando includo sia il monkeypatch che il Validator in app / validators / address_validator.rb viene caricato solo l'oggetto AddressValidator, non il monkeypatch. Ragazzi, sperimentate lo stesso comportamento?
jshkol

1
spring stopera necessario per me in Rails 5.2, altrimenti non veniva rilevato.
Jack Kinsella

15

Se lo aggiungi al tuo file /config/application.rb:

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

Quindi Rails caricherà automaticamente i tuoi validatori all'avvio (proprio come / config / initializers /), ma mantieni la struttura pulita di avere i tuoi validatori in un posto carino e ben chiamato.


9
Buona idea, ma il tuo codice ha bisogno di una pulizia: config.autoload_paths += %W(#{config.root}/lib/validators/)
aNoble

6

lib/validatorssembra di gran lunga il più pulito. Tuttavia potrebbe essere necessario caricarli prima dei modelli, quindi probabilmente da un inizializzatore.


4

Ecco i documenti ufficiali sulle convalide personalizzate. AFAIK è una buona pratica mantenerli nei modelli pertinenti.


5
A meno che non siano applicabili a più modelli, nel qual caso dovresti tenerli altrove per rimanere ASCIUTTO.
Andrew Marshall

Che è quello che presumibilmente sono perché altrimenti non ha molto senso creare una classe separata per loro.
Jakub Hampl

7
@Jakub Sì, c'è: Principio di responsabilità unica
mattwynne

2
Il collegamento ai documenti ufficiali è interrotto. Ecco la posizione corrente di quella documentazione; guide.rubyonrails.org/…
Stijnster
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.