Rails 3: проверка комбинированных значений

В Rails 2.x вы можете использовать валидации, чтобы убедиться, что у вас есть уникальное комбинированное значение, подобное этому:

validates_uniqueness_of :husband, :scope => :wife

В соответствующей миграции он может выглядеть так:

add_index :family, [:husband, :wife], :unique => true

Это позволит убедиться, что комбинация муж/жена уникальна в базе данных. Теперь в Rails 3 синтаксис проверки изменился, и атрибут scope, похоже, исчез. Теперь он выглядит следующим образом:

validates :husband, :presence => true

Любая идея, как я могу добиться комбинированной проверки в Rails 3? Проверка Rails 2.x по-прежнему работает в Rails 3, поэтому я все еще могу использовать первый пример, но он выглядит так "старым", есть ли лучшие способы?

Ответ 1

Медведь со мной. Способ проверки в ActiveModel заключается в поиске Validator.

:presence => true ищет PresenceValidator и передает параметры: true в инициализатор валидатора.

Я думаю, что вы хотите

validates :husband, :presence => true, :uniqueness => {:scope => :wife}

(Валидатор уникальности фактически является частью ActiveRecord, а не ActiveModel. Это действительно интересно, как разработчики установили это. Это довольно элегантно.)