Ruby on rails Rails:Form对象在activemodel上找不到I18n(名称空间问题)
我有一个表单对象(rails 3),我正在尝试使用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
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号轨道。第二,看看这个--看看你是否能让它作为一个自定义的验证错误消息来工作。