Я предоставляю веб-сервис для внешних компаний. Требуемые данные охватывают несколько моделей, включая человека, адрес и т. Д. Я хочу проверить полученные данные условно на основе некоторых полей в запросе. Со временем у меня будет много разных наборов проверочных данных, хотя в настоящее время у меня есть только один, и я собираюсь добавить второй.
Моя текущая модель выглядит примерно так
class Person < ActiveRecord::Base
validates_length_of :first_name, :within => 1..32, :allow_blank => true
...
...
end
Концептуально моя модель теперь должна сделать что-то вроде этого.
class Person < ActiveRecord::Base
validate :first_name?
def first_name?
if country == 'UK'
if company_name == 'ABC'
validates_length_of :first_name, :within => 1..32
else if company_name == 'DEF'
validates_length_of :first_name, :within => 2..20
end
else if country == 'DE'
if company_name == 'ABC'
validates_length_of :first_name, :within => 1..32
else if company_name == 'DEF'
validates_length_of :first_name, :within => 2..20
end
end
end
Очевидно, что это будет хорошо работать для 2 компаний / стран, но не будет работать хорошо, так как количество компаний и / или стран увеличивается. Сейчас я рассматриваю возможность сохранения данных проверки в базе данных или в файле YAML, а затем выполняю проверки вручную для каждого поля на основе минимальных, максимальных значений формата, хранимых извне из модели.
Я думаю, что мог бы сохранить данные проверки в структуре, подобной следующей
country: UK
companyname: ABC
field: first_name
minimum_length: 2
maximum_length: 20
required: true
field: middle_name
minimum_length: 1
maximum_length: 10
field: email_address
minimum_length: 10
format: /someregexforemail addresses/
companyname: DEF
field
...
country: DE
companyname: XYZ
field:
....
и так далее.
Затем я мог бы загрузить эти данные проверки и использовать их в моем собственном свернутом валидаторе.
Кто-нибудь делал подобные вещи в прошлом и какими методами вы пользовались? Мне особенно интересно узнать, как вы подошли к следующему.
- Где вы хранили свои данные конфигурации, то есть DB или YAML?
- Вы загружали и анализировали данные конфигурации для каждого запроса или один раз при загрузке сервера?
- Как вы структурировали реальный метод, который проводил валидацию?