Rails:表单对象在activemodel上找不到I18n(命名空间问题)

时间:2017-02-20 02:56:16

标签: ruby-on-rails forms rails-i18n

我有一个表单对象(rails 3),我正在尝试使用config/locales/en.yml来获取错误消息。

我的表单对象如下所示:

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"

我遇到的问题是,我无法使用国际化。

2 个答案:

答案 0 :(得分:3)

我通过挖掘源代码找到了答案。我遇到的问题是我的form object位于Users::PasswordAndLoginUpdatingForm命名空间中。

技巧 使用activemodel:作为您的命名空间,但是,如果您的模型中有更多名称空间,则它们将与/分开。

所以,正确的yml看起来像这样:

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

答案 1 :(得分:0)

activerecord:文件中activemodel:不是config/locales/en.yml吗?