Каков наилучший способ рефакторинга логики валидации и регулярных выражений в рельсах? - PullRequest
2 голосов
/ 10 мая 2011

Допустим, у вас есть несколько моделей, которые содержат поля для адреса, почтового индекса, провинции / страны, номера телефона и т. Д.

Это довольно распространенные поля, которые имеют определенные проверки регулярных выражений.Если вы поместите одинаковые проверки и регулярные выражения в каждую модель, она будет дублирована.Также тесты дублируются.Это запах;)

Как лучше всего использовать рубин и рельсы для рефакторинга таких вещей?Модуль?

В Java с Hibernate мы использовали класс Component для хранения адреса, а затем мы помещали туда логику проверки.Каждая модель, которая хотела использовать адрес, просто содержала бы один, и она получала бы всю логику проверки адреса.

Каков подход к достижению того же самого в рельсах?Спасибо!

1 Ответ

1 голос
/ 10 мая 2011

Создание пользовательских валидаторов для различных типов валидаций, которые вам нужны, а затем вызовите их в ваших классах модели.

Например:

class PostalCodeValidator < ActiveModel::EachValidator
  def validate_each(record, attr_name, value)
    unless value =~ /^\d{5}$/
      record.errors[attr_name] << "must be a 5-digit postal code"
    end
  end

Теперь используйте эту валидацию в каждом классе модели идля каждого атрибута, который является почтовым индексом.Например, если у вашего Заказчика есть атрибут postal_code:

class Customer < ActiveRecord::Base
  validates :postal_code, :postal_code => true
end

Там больше подробностей и множество причудливых опций, поэтому я предлагаю поискать Google на пользовательских валидаторах rails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...