Рельсы 3:Проверка комбинированных значений
Вопрос
В Rails 2.x вы можете использовать проверки, чтобы убедиться, что у вас уникальное комбинированное значение, например:
validates_uniqueness_of :husband, :scope => :wife
В соответствующей миграции это может выглядеть так:
add_index :family, [:husband, :wife], :unique => true
Это обеспечит уникальность комбинации мужа и жены в базе данных.Теперь в Rails 3 синтаксис проверки изменился, и атрибут области, похоже, исчез.Теперь это выглядит так:
validates :husband, :presence => true
Есть идеи, как я могу добиться комбинированной проверки в Rails 3?Валидации Rails 2.x все еще работают в Rails 3, поэтому я все еще могу использовать первый пример, но он выглядит таким «старым», есть ли лучшие способы?
Решение
Потерпите меня.Способ работы метода проверки в ActiveModel заключается в поиске валидатора.
:presence => true
ищет PresenceValidator
и передает параметры: true
к инициализатору валидатора.
Я думаю, ты хочешь
validates :husband, :presence => true, :uniqueness => {:scope => :wife}
(Валидатор уникальности на самом деле является частью ActiveRecord, а не ActiveModel.Очень интересно, как разработчики это реализовали.Это довольно элегантно.)