ruby 转换Rails模型关联-不工作

gev0vcfq  于 2023-08-04  发布在  Ruby
关注(0)|答案(2)|浏览(78)

有人有关于如何在Rails中转换模型关联的提示吗?
举例来说:我有一个人的模型,它可以有许多电话。但是,一个人需要至少有一个电话。我无法翻译这个验证。我能做的最好的就是:

validates_presence_of :phones, :message => "At least one phone is required."

字符串
在我的YAML上,我替换了这一行以省略%{attribute}

format: ! '%{message}'


这样只显示我的消息,避免了显示未翻译的字段名。
这让我很头疼,因为有些gem根本不允许我传递:message => "something describing the error",所以我想通过我的YAML配置所有的错误消息。
此外,对于一些模型,我能够转换它们的属性,而对于其他模型,我不能。举例来说:

activerecord:  
  attributes:
    additional_info:
      account_manager: "Manager"


这个可以。我可以在我的表格上看到“经理”。但是,当这个字段有错误时,Rails会将其显示为"Additional info account manager can't be blank"
我试过这个:

activerecord:          
  errors:
    models:
      additional_info:
        attributes:
          account_manager: "Manager"


但没找到。
我看了文件,但不知道为什么会这样。

0pizxfdo

0pizxfdo1#

以下是Rails 4.1的有效密钥路径:

# Basic Attribute on Model
activerecord:
  attributes:
    #{model_class.model_name.i18n_key}:
      #{attribute_name}:
        "Localized Value"

# Attribute on Nested Model
activerecord:
  attributes:
    #{model_class.model_name.i18n_key}/#{association_name}:
      #{attribute_name}:
        "Localized Value"
    #{association_name}:
      #{attribute_name}:
        "Fallback Localized Value"

字符串
因此,给定这个模型(它具有:personi18n_key):

class Person
  has_many :friends
end


你会有这些locale定义:

activerecord:
  attributes:
    person:
      first_name:
        "My Name"
    person/friends:
      first_name:
        "My Friend's Name"
    friends:
      first_name:
        "A Friend's Name"


如果您的模型是一个命名空间,例如:

class MyApp::Person
  has_many :friends
end


i18n_key变成:my_app/person,您的/密钥开始磨损:

activerecord:
  attributes:
    my_app/person:
      first_name:
        "My Name"
    my_app/person/friends:
      first_name:
        "My Friend's Name"
    friends:
      first_name:
        "A Friend's Name"

vxf3dgd4

vxf3dgd42#

Rails 3.2已经改变了这种行为。我以前发帖的方式已经过时了。
现在,为了翻译关联,需要添加斜线(而不是嵌套所有内容)。所以,与其这样,不如这样:

activerecord:
      attributes:
        person:
          additional_info:
            account_manager: "Manager"

字符串
现在正确的是:

activerecord:
      attributes:
        person:
          additional_info/account_manager: "Manager"


此外,我还发现has_many关联的翻译与此不同。如果您要翻译这些内容,下面的示例可能会有所帮助:

activerecord:
      attributes:
         emails:
           address: "E-mail field"


您需要传递关联名称(在本例中为emails),而不是模型名称(如上面所做的那样)。
查看此评论并获取更多信息:
https://github.com/rails/rails/commit/c19bd4f88ea5cf56b2bc8ac0b97f59c5c89dbff7#commitcomment-619858
https://github.com/rails/rails/pull/3859

相关问题