Де слід зберігати спеціальні валідатори Rails 3?


93

Я бачив, як документи / веб-сайти показують, що спеціальні валідатори повинні містити проект /libабо /lib/validatorsкаталог проекту. Я виявив (прочитавши відповідь на інший пост), що вони, здається, працюють config/initializers. Хтось знає чи має вказівник на офіційну документацію, яка показує, де мають жити спеціальні валідатори?


Відповіді:


220

Якщо ви розмістите свої власні валідатори в app/validatorsних, вони автоматично завантажуватимуться без необхідності змінювати config/application.rbфайл.


Я не знаю, чи є якийсь gem / config, який потрібно додати для цього, але під рейками 3.2.8 це не працює. Зокрема, просто перекинути валідатор у додаток / валідатори / ??? rb не працює.
Даг

17
Дуг намагається назвати файл валідатора таким же чином, як названий клас валідатора, але підкреслено: MyCoolValidator переходить до app / validators / my_cool_validator.rb
еквівалент, 8

14
@Doug вам потрібно перезапустити сервер. Шляхи автозавантаження розширюються під час ініціалізації, тому нові підпапки не будуть підхоплені, поки ви цього не зробите.
Тимо

Мені подобається також monkeypatch ActiveModel :: Validations :: HelperMethods, щоб додати помічника для моєї нової перевірки (наприклад, validates_address для AddressValidator). Коли я включаю і monkeypatch, і Validator в додаток / validators / address_validator.rb, завантажується лише об'єкт AddressValidator, а не monkeypatch. Ви, хлопці, переживаєте таку саму поведінку?
jshkol

1
spring stopбув потрібний мені в Rails 5.2, інакше його не забрали.
Джек Кінселла

15

Якщо ви додасте це у файл /config/application.rb:

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

Тоді Rails автоматично завантажить валідатори при запуску (як-от / config / inicijalizers /), але ви збережете чисту структуру наявності валідаторів в одному добре, добре названому місці.


9
Гарна ідея, але ваш код потребує певного очищення: config.autoload_paths += %W(#{config.root}/lib/validators/)
aNoble

6

lib/validatorsздається, найчистішим. Однак вам може знадобитися завантажити їх перед вашими моделями, тому, можливо, з ініціалізатора.


4

Ось офіційні документи про власні перевірки. AFAIK рекомендує зберігати їх у відповідних моделях.


5
Якщо вони не застосовуються до декількох моделей, у такому випадку ви повинні зберігати їх деінде, щоб залишатися СУХИМИ.
Ендрю Маршалл

Якими вони, мабуть, є, бо інакше немає сенсу створювати для них окремий клас.
Якуб Хампл

7
@Jakub Так є: Принцип єдиної відповідальності
mattwynne

2
Посилання на офіційні документи порушено. Ось поточне місце розташування цієї документації; guides.rubyonrails.org/…
Штайнстер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.