Проверка уникальности Rails 2.3 - как я могу получить значение, вызывающее ошибку - PullRequest
2 голосов
/ 12 мая 2010

Я пытаюсь зафиксировать значение, которое выдает ошибку уникальности (или, в этом отношении, любой другой тип встроенной проверки), чтобы отобразить его в опции :message. Вот что я попробовал (не сработало)

# inside the model
validate_uniqueness_of :name, :message => "#{name} has already been taken" # also tried using #{:name}

Я мог бы использовать пользовательскую проверку, но это превосходит смысл использования чего-то, что уже интегрировано в AR. Какие-нибудь мысли? спасибо.

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Попробуйте эту технику интерполяции:

validate_uniqueness_of :name, :message => "%{value} has already been taken"

RailsGuide для проверок активной записи и обратных вызовов показывает пример, где %{value} интерполируется в пользовательское сообщение об ошибке:

:message => "%{value} is not a valid size"

Я посмотрел документацию validates_each и вижу, что блоку валидации передано три свойства: |record, attr, value|. Все три могут быть доступны с %{model}, %{attribute} и %{value}.

Хотя это ограничено, так как оно дает вам доступ только к трем свойствам, к счастью, это все, что вам нужно.

0 голосов
/ 12 мая 2010

Попробуйте self.name

validates_uniqueness_of :name, :message => "#{self.name} has already been taken" # also tried using #{:name}

Также validate_uniqueness_of неверно, должно быть validates_uniqueness_of

Если это не работает, используйте метод validate и строку комментария validates_uniqueness_of

 def validate
    name= User.find_by_name(self.name) #Assuming User is your Model Name
    unless name.blank?
      self.errors.add :base, "#{self.name} has already been taken"
    end
 end
...