Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:Form对象在activemodel上找不到I18n(名称空间问题)_Ruby On Rails_Forms_Rails I18n - Fatal编程技术网

Ruby on rails Rails:Form对象在activemodel上找不到I18n(名称空间问题)

Ruby on rails Rails:Form对象在activemodel上找不到I18n(名称空间问题),ruby-on-rails,forms,rails-i18n,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 :request

我有一个表单对象(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 }
en:
  activemodel:
    errors:
      models:
        users_password_and_login_updating_form:
          attributes:
            requested_email_address:
              invalid: "bar"
en:
  activemodel:
    errors:
      models:
        users/password_and_login_updating_form:
          attributes:
            requested_email_address:
              invalid: "foo"
在我的状态中,我和往常一样

form_for @form_object ... do |f|
如果我
pry
in并找出
f.object\u name
是什么,我会得到
users\u password\u和\u login\u update\u表单

最后,我的
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 }
en:
  activemodel:
    errors:
      models:
        users_password_and_login_updating_form:
          attributes:
            requested_email_address:
              invalid: "bar"
en:
  activemodel:
    errors:
      models:
        users/password_and_login_updating_form:
          attributes:
            requested_email_address:
              invalid: "foo"

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

应该是
activerecord:
而不是
activemodel:
在您的
config/locales/en.yml
文件中吗?

我通过深入研究源代码找到了答案。我遇到的问题是,我的
表单对象
位于
Users::PasswordAndLoginUpdatingForm
命名空间中

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

因此,正确的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 }
en:
  activemodel:
    errors:
      models:
        users_password_and_login_updating_form:
          attributes:
            requested_email_address:
              invalid: "bar"
en:
  activemodel:
    errors:
      models:
        users/password_and_login_updating_form:
          attributes:
            requested_email_address:
              invalid: "foo"

不,我不这么认为,因为此表单不是从ActiveRecord继承的。我只是尝试了一下,但没有成功。有两个建议:首先,如果你还没有,看看这个——特别是第一块代码和它下面的文本,上面写着“你的对象中需要最后三个方法才能正确地生成错误消息并处理多种语言。”现在是5号轨道。第二,看看这个--看看你是否能让它作为一个自定义的验证错误消息来工作。