Rails 3: проверка объединенных значений - PullRequest
40 голосов
/ 28 марта 2010

В 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, поэтому я все еще могу использовать первый пример, но он выглядит так "стар", есть ли лучшие способы?

1 Ответ

57 голосов
/ 28 марта 2010

Потерпи меня. Метод validates в ActiveModel работает, чтобы искать Validator.

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

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

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

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

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