Используйте лямбду, но, по крайней мере, в более поздних версиях 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!!!"
}