gpt4 book ai didi

ruby-on-rails - 在子类中继承 Rails i18n 验证错误消息

转载 作者:行者123 更新时间:2023-12-04 17:51:46 25 4
gpt4 key购买 nike

我的理解

假设我有一个带有方便验证的类,例如:

User < ActiveRecord::Base
validates :username, :format => {/regex/}, :message => :name_format
end

在这种情况下,我可以使用 i18n通过在我的 /config/locals/en.yml 中包含以下内容,使错误消息可翻译:
en:
activerecord:
errors:
models:
user:
attributes:
username:
name_format: 'has the way-wrong format, bro!'

这很好,而且通常非常方便。

我想知道的是:

我的问题是:当我有从 User 继承的子类时会发生什么:
UserSubclassOne < User
# extra stuff
end
UserSubclassTwo < User
# extra stuff
end
...
UserSubclassEnn < User
# extra stuff
end

现在的问题是Rails 找不到翻译 user_subclass_one.attributes.username.name_format .

它提示:
translation missing:
en.activerecord.errors.models.user_subclass_one.attributes.username.name_format

我希望 Rails 会查找 UserSubclassOne 的层次结构至 Useren.yml 中搜索字符串时然后注意它什么时候“命中”,但是(除非我做错了什么)显然这不会发生。

一个明显的解决方案是复制 en.yml.en.errors.models 中的数据。为 user , user_subclass_one , user_subclass_two等,但我的 Rails 感觉告诉我这是非常错误的。

有什么想法吗,伙计们?

潜在的并发症:
User在 gem 中定义 MyGem包含在 Rails 引擎中 MyEngine包含在完整的 Rails 应用程序中 MyApp定义 UserSubclassOne , ..., UserSubclassEnn .我认为这不重要,因为验证在 MyGem::User 中运行。 ,这是 en.yml的地方文件生活——只是想让人们知道,以防万一。

终极问题/解决方案:

所以事实证明问题出在命名空间上。回想一下 MyApp (定义 UserSubclassOne )使用 MyGem (定义 User )。原来 User实际上在命名空间 MyGem 中(不一定总是这样),所以在 User 开头的完整声明行不是:
User < ActiveRecord::Base

反而
MyGem::User < ActiveRecord::Base

.

当 i18n gem 查找类层次结构时,它会注意到这个命名空间并搜索 my_gem/user ,而不是简单的 user , my_gem.user , my_gem: user , 等等。

因此我不得不改变我的 en.yml文件到: /config/locals/en.yml :
en:
activerecord:
errors:
models:
my_gem/user:
attributes:
username:
name_format: 'has the way-wrong format, bro!'

和宾果游戏!

最佳答案

所以事实证明问题出在命名空间上。回想一下 MyApp (定义 UserSubclassOne )使用 MyGem (定义 User )。原来User实际上在命名空间 MyGem 中(不一定总是这样),所以在 User 开头的完整声明行不是:

User < ActiveRecord::Base

反而
MyGem::User < ActiveRecord::Base

.

当 i18n gem 查找类层次结构时,它会注意到这个命名空间并搜索 my_gem/user ,而不是简单的 user , my_gem.user , my_gem: user , 等等。

因此我不得不改变我的 en.yml文件到: /config/locals/en.yml :
en:
activerecord:
errors:
models:
my_gem/user:
attributes:
username:
name_format: 'has the way-wrong format, bro!'

和宾果游戏!

关于ruby-on-rails - 在子类中继承 Rails i18n 验证错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14886629/

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