Сообщение проверки переопределения Rails - PullRequest
8 голосов
/ 12 ноября 2010

Я хочу видеть недопустимое значение в сообщении проверки.

validates_uniqueness_of :event, :scope => :user_id

Результат: "Заголовок уже занят" Я хочу: "Событие # {событие} уже было занято # {пользователем"} "

я пытаюсь сделать это, булочка не работает:

validates_uniqueness_of :event, :scope => :user_id, :message=>"#{self.event} already has been taken by #{self.user}"

Ответы [ 4 ]

13 голосов
/ 12 ноября 2010

Из комментария к исходному коду ActiveRecord:

Значения: модель,: атрибут и : значение всегда доступно для интерполяция Значение: количество доступно, когда применимо. Может быть использован для плюрализации.

Так что вы можете просто написать свое сообщение как

validates_uniqueness_of :event, :scope => :user_id, 
                        :message=>"{{value}} is already taken"
6 голосов
/ 23 августа 2013

Используйте лямбду, но, по крайней мере, в более поздних версиях Rails ActiveRecord попытается передать два параметра этой лямбде, и он должен их учитывать.Используя более простой пример, допустим, что мы хотим убедиться, что имя пользователя содержит только буквенно-цифровые символы:

validates_format_of :username, :with => /^[a-z0-9]+$/i, 
    :message => lambda{|x,y| "must be alphanumeric, but was #{y[:value]}"}

Первый параметр, передаваемый лямбда-выражению, является нечетным, не очень маленьким символом, который отлично подходит для сообщенияробот, что пошло не так:

:"activerecord.errors.models.user.attributes.username.invalid"

(Если вас смущают вышеприведенные обозначения, символы могут содержать не только буквы, цифры и подчеркивания. Но если они есть, вам придетсязаключите их в кавычки, потому что в противном случае :activerecord.errors выглядит так, как будто вы пытаетесь вызвать метод .errors для символа с именем :activerecord.)

Второй параметр содержит хеш с полями, которыепоможет вам "убрать" ваш ответ об ошибке.Если я попытаюсь добавить имя пользователя с пунктуацией, например "Superstar !!!", оно будет выглядеть примерно так:

{
  :model=>"User", 
  :attribute=>"Username", 
  :value=>"Superstar!!!"
}
6 голосов
/ 04 марта 2011

Ну, на самом деле в Rails 3.x это ни% {{value}}, ни {{value}}, но% {value}.

5 голосов
/ 12 ноября 2010

используйте лямбду:

validates_uniqueness_of :event, :scope => :user_id, :message=> lambda { |e| "#{e.event} already has been taken by #{e.user}"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...