Rails - validates_uniqueness_of: доступ к дублирующему элементу? - PullRequest
3 голосов
/ 01 июля 2010

У меня есть базовая модель Rails с двумя свойствами: имя и код . У меня есть validates_uniqueness_of для свойства code . Тем не менее, я бы хотел настроить сообщение: для отображения имени дубликата. Есть ли способ получить доступ к этому дубликату?

Например, допустим, я сначала ввел запись с именем Срок действия истек с кодом EXP . Затем я ввожу Опыт с кодом EXP . Мне бы хотелось, чтобы в сообщении говорилось что-то вроде: «Код уже истек».

> m1 = Model.new(:name => 'Expired', :code => 'EXP')
> m2 = Model.new(:name => 'Experience', :code => 'EXP')
> m1.save!
> m2.save!

validates_uniqueness_of :code,
  :message => "Code already taken by #{duplicate.name}"

Существует ли какая-либо встроенная конструкция Rails, которая содержит дубликат объекта, чтобы я мог получить к нему доступ, как в сообщении:? Или есть какой-нибудь другой способ, которым я могу выполнить код, чтобы определить дубликат, когда эта проверка запускается?

Ответы [ 2 ]

3 голосов
/ 01 июля 2010

Полагаю, вам нужно написать собственный метод проверки. Что-то вроде:

def validate
   model = Model.first(:conditions => {:code => self.code})
   unless model.blank? && (self.id != model.id)
     errors.add_to_base "Code already taken by #{model.name}"
   end
end
2 голосов
/ 01 июля 2010

Согласно @j, но в качестве обратного вызова проверки и нацеливания сообщения специально на ошибочный атрибут

validate do |model|
   duplicate = Model.first(:conditions => {:code => model.code})
   if duplicate
     model.errors.add :code, "already taken"
   end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...