gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:02:24 25 4
gpt4 key购买 nike

我有一个嵌套属性,我可以在该属性上执行存在验证。我试图为在完整错误消息文本中返回的属性名称提供翻译,但没有成功。

型号叫Identity并包含一个名为 identity 的属性该模型嵌套在另一个中,带有 has_many关系。

当前返回的典型错误消息是这样的

Identities identity can't be blank

我想将属性(默认情况下 Identities identity )转换为其他内容。

我有
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):

我也试过 many而不是 other没有区别。

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

最佳答案

human_attribute_name 添加一些调试输出方法揭示了 i18n 路径应该是什么。

该示例有一个 userhas_many :identities 的模型关系。所需的属性是 identity , Identity 的一个属性型号,其中User型号有很多。

我看了 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"

最后两个是字符串,如果表示为符号的路径都不匹配可用翻译,则第一个将匹配。因此,在没有翻译的情况下,输出将是字符串“Identities identity”(永远不会使用另一个字符串“Identity”)。

因此,以下任何翻译路径都可以使用:
activerecord.attributes.user/identities.identity
activerecord.attributes.identities.identity
attributes.identity

路径按该顺序尝试,第一个匹配的是将使用的路径。

关于ruby-on-rails - 翻译模型嵌套属性验证消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25117361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com