2017-02-20 15 views
1

У меня есть объект формы (rails 3), и я пытаюсь использовать config/locales/en.yml для сообщений об ошибках.Rails: объект формы не находит I18n on activemodel (проблема с именами)

Моя форма объекта выглядит следующим образом:

class Users::PasswordAndLoginUpdatingForm 
    include Virtus.model 

    extend ActiveModel::Naming 
    include ActiveModel::Conversion 
    include ActiveModel::Validations 

    attribute :requested_email_address, String 
    validates :requested_email_address, allow_blank: true, format: { with: User::VALID_EMAIL_REGEX } 

В моей форме я имею обычный

form_for @form_object ... do |f| 

Если я pry в и выяснить, что f.object_name это я получаю users_password_and_login_updating_form

Наконец, мой config/locales/en.yml выглядит так:

en: 
    activemodel: 
    errors: 
     models: 
     users_password_and_login_updating_form: 
      attributes: 
      requested_email_address: 
       invalid: "bar" 

Вопрос, который у меня есть, я не могу заставить его использовать интернационализацию.

ответ

1

Ну, я узнал ответ, копаясь в исходном коде. Проблема, с которой я столкнулся, что мой form object был в пространстве имен Users::PasswordAndLoginUpdatingForm.

Хитрость является использовать activemodel: в пространстве имен, но, если у вас есть дополнительные пространства имен в ваших моделях, они разделены / с.

Таким образом, правильный YML выглядит следующим образом:

en: 
    activemodel: 
    errors: 
     models: 
     users/password_and_login_updating_form: 
      attributes: 
      requested_email_address: 
       invalid: "foo" 
0

Должно ли оно activerecord: не activemodel: в вашем файле config/locales/en.yml?

+0

Нет, я не думаю, что так, как эта форма _не_ наследует от ActiveRecord. Я просто попробовал, хотя и не повезло. –

+1

Два предложения: во-первых, если вы еще этого не сделали, взгляните на это - http://api.rubyonrails.org/classes/ActiveModel/Errors.html - особенно первый блок кода и текст под ним, который читает «Последние три метода требуются в вашем объекте для ошибок, чтобы они могли корректно генерировать сообщения об ошибках, а также обрабатывать несколько языков». Это Rails 5. Во-вторых, проверьте это - http://stackoverflow.com/questions/17935597/ruby-on-rails-i18n-want-to-translate-custom-messages-in-models - и посмотрите, можете ли вы заставить его работать как сообщение об ошибке проверки подлинности. – eggroll