Где следует хранить пользовательские валидаторы Rails 3?


94

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


Ответы:


221

Если вы разместите свои собственные валидаторы, app/validatorsони будут автоматически загружены без необходимости изменять ваш config/application.rbфайл.


Я не знаю, нужно ли для этого добавить какой-нибудь гем / конфигурацию, но под rails 3.2.8 это не работает. В частности, простое размещение валидатора в app / validators / ???. Rb не работает.
Дуг

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

14
@Doug вам нужно перезагрузить сервер. Пути автозагрузки расширяются при инициализации, поэтому новые подпапки не будут загружены, пока вы этого не сделаете.
Timo

Мне также нравится monkeypatch ActiveModel :: Validations :: HelperMethods, чтобы добавить помощника для моей новой проверки (например, validates_address для AddressValidator). Когда я включаю и monkeypatch, и Validator в app / 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 / initializers /), но вы сохраните чистую структуру, когда ваши валидаторы будут находиться в одном красивом, хорошо названном месте.


9
Хорошая идея, но ваш код нуждается в некоторой очистке: config.autoload_paths += %W(#{config.root}/lib/validators/)
aNoble

6

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


4

Вот официальные документы о пользовательских проверках. AFAIK это хорошая практика, чтобы держать их в соответствующих моделях.


5
Если они не применимы к нескольким моделям, в этом случае вы должны хранить их в другом месте, чтобы они оставались СУХИМИ.
Эндрю Маршалл

Предположительно, они и есть, потому что иначе нет смысла создавать для них отдельный класс.
Якуб Хэмпл,

7
@Jakub Да, есть: Принцип единой ответственности
Мэттвинн,

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