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

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

发布时间:2020-12-17 03:36:41 所属栏目:百科 来源:网络整理
导读:我的理解 假设我有一个方便的验证类,如: User ActiveRecord::Base validates :username,:format = {/regex/},:message = :name_formatend 在这种情况下,我可以使用i18n通过在/config/locals/en.yml中包含以下内容来使错误消息可翻译: en: activerecord: er
我的理解

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

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在en.yml中搜索字符串时会查找UserSubclassOne的层次结构,然后注意它何时获得“点击”,但是(除非我做了一些可怕的错误)显然不会发生了.

一个显而易见的解决方案是复制en.yml.en.errors.models中的user,user_subclass_one,user_subclass_two等数据,但我的Rails-sense告诉我这是非常错误的.

任何想法,伙计们?

潜在的并发症:

用户在包含在Rails引擎MyEngine中的gem MyGem中定义,该引擎包含在定义UserSubclassOne,…,UserSubclassEnn的完整Rails应用程序MyApp中.我不认为这应该是重要的,因为验证是在MyGem :: User中运行的,这是en.yml文件所在的位置 – 只是想让人们知道以防万一.

终极问题/解决方案:

事实证明问题是命名空间.回想一下,MyApp(定义UserSubclassOne)使用MyGem(定义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!'

和宾果游戏!

解决方法

事实证明问题是命名空间.回想一下,因此User开头的完整声明行不是:

User < ActiveRecord::Base

反而

MyGem::User < ActiveRecord::Base

.

当i18n gem查找类层次结构时,bro!'

和宾果游戏!

(编辑:李大同)

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

    推荐文章
      热点阅读