加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 翻译模型嵌套属性验证消息

发布时间:2020-12-16 22:01:01 所属栏目:百科 来源:网络整理
导读:我有一个嵌套属性,我在其上执行在线验证.我尝试没有成功提供在完整的错误消息文本中返回的属性名称的翻译. 该模型称为身份,并包含称为身份的属性该模型嵌套在另一个与has_many关系中. 此时会返回一个典型的错误消息 Identities identity can't be blank 我想
我有一个嵌套属性,我在其上执行在线验证.我尝试没有成功提供在完整的错误消息文本中返回的属性名称的翻译.

该模型称为身份,并包含称为身份的属性该模型嵌套在另一个与has_many关系中.

此时会返回一个典型的错误消息

Identities identity can't be blank

我想将属性(默认身份标识)转换为其他内容.

我有

en:
  activerecord:
    models:
      identity:
        identity: "whatever"

如果我这样做,我会收到一个错误

I18n::InvalidPluralizationData (translation data {:identity=>"whatever"} can not be used with :count => 1):

我已经尝试通过改变上述来添加复数数据

en:
  activerecord:
    models:
      identity:
        identity:
          one: "one"
          other: "other"

这会将错误更改为

I18n::InvalidPluralizationData (translation data {:identity=>{:one=>"one",:other=>"other"}} can not be used with :count => 1):

我也尝试了许多而不是其他没有区别.

我花了几个小时试图做这项工作,在Stack Overflow和其他地方阅读了其他问题,没有成功.为属性名称编写翻译的正确方法是什么?

解决方法

将一些调试输出添加到human_attribute_name方法会显示出i18n路径应该是什么.

该示例具有一个具有has_many:identity关系的用户模型.所需的属性是身份,身份模型的属性,用户模型具有许多.

我查看了gems / activemodel-4.0.1 / lib / active_model,文件translation.rb. human_attribute_name方法查找以下路径:

:"activerecord.attributes.user/identities.identity"

它还将以下内容指定为默认值,它们是后备翻译:

:"activerecord.attributes.user/identities.identity"
:"activerecord.attributes.identities.identity"
:"attributes.identity"
"Identities identity"
"Identity"

最后两个是字符串,如果没有表示为符号的路径匹配可用的翻译,则第一个将匹配.所以,在没有翻译的情况下,输出将是字符串“标识身份”(另一个字符串,“标识”永远不会被使用).

所以,以下任何一种翻译路径都可以运行:

activerecord.attributes.user/identities.identity
activerecord.attributes.identities.identity
attributes.identity

路径是按照顺序进行的,首先匹配的是要使用的路径.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读