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

pat*_*vey 3 forms ruby-on-rails 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 }
Run Code Online (Sandbox Code Playgroud)

在我的形式中我有通常的

form_for @form_object ... do |f|
Run Code Online (Sandbox Code Playgroud)

如果我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"
Run Code Online (Sandbox Code Playgroud)

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

pat*_*vey 6

好吧,我通过深入研究源代码找到了答案。我遇到的问题form object是在Users::PasswordAndLoginUpdatingForm命名空间中。

诀窍用作activemodel:您的命名空间,但是,如果您的模型中有更多命名空间,它们将用/s 分隔。

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

en:
  activemodel:
    errors:
      models:
        users/password_and_login_updating_form:
          attributes:
            requested_email_address:
              invalid: "foo"
Run Code Online (Sandbox Code Playgroud)