рельсы 3 валидаторов и i18n - PullRequest
8 голосов
/ 26 февраля 2011

, поэтому я только начал использовать пользовательские валидаторы в rails 3, однако я не уверен, смогу ли я использовать мои существующие файлы локали activerecord i18n.кажется, что мне нужно сделать

record.errors[attribute] << I18n.t('activerecord.errors.models.{model}.attributes.{attribute}.invalid_whatever') if ...

вместо того, чтобы раньше, когда я мог просто сделать

:message => :invalid_whatever

, есть ли сокращение, которое я могу использовать в своем классе ActiveModel: Validator / EachValidator, чтобы выполнитьодно и то же?

Ответы [ 2 ]

16 голосов
/ 03 марта 2011

У меня была такая же проблема, и я наконец нашел ответ ...

record.errors.add(attribute,:invalid_whatever)
2 голосов
/ 01 мая 2014

Если вы в конечном итоге прочитаете этот вопрос (которому на момент написания статьи уже несколько лет), вы можете попробовать следующее для Rails 4:

В вашей модели:
class Document < ActiveRecord::Base validates :date, date_in_present: {message: :custom_message} end

В вашем валидаторе:
class DateInPresentValidator < ActiveModel::EachValidator def validate_each(object, attribute, value) if(value.to_date >= Date.today) true else object.errors[attribute] << options[:message] end end end

В вашем файле i18n yml:
en: activerecord: errors: models: document: attributes: date: custom_message: Date is not in present

Я не проверял это полностью.

Вы также можете указать запасное сообщение в пользовательском валидаторе:
object.errors[attribute] << (options[:message] || "Display this message if message is not in options")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...