Вопрос

В 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.Очень интересно, как разработчики это реализовали.Это довольно элегантно.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top