繁体   English   中英

Rails 5 - 从嵌套模型中转换错误

[英]Rails 5 - Translating errors from nested model

pt-BR.yml

pt-BR:
  activerecord:
    models:
      user: Usuário
      project: Projeto
    attributes:
      user:
        name: O nome
        description: A descrição
        projects: Os projetos
      project:
        name: O nome
  errors:
    format: "%{attribute} %{message}"
    messages:
      accepted: deve ser aceito
      blank: não pode ficar em branco
      ........

楷模:

class User < ApplicationRecord
  has_many :projects, dependent: :destroy, inverse_of: :user

  accepts_nested_attributes_for :projects, allow_destroy: true
end

class Project < ApplicationRecord
  belongs_to :user, inverse_of: :projects

  validates :name, presence: true, length: { mininum: 3, maximum: 255 }
end

控制器:

def update
  if @user.update(user_params)
    render json: @user
  else
    render json: { errors: @user.errors.full_messages }, status: :unprocessable_entity
  end
end

调用方法.error.full_messages时,正在翻译所有错误消息,除了那些来自项目对象的消息(正如您上面可能已经注意到的,我正在使用accepts_nested_attributes_for )。

我总是收到以下错误消息:

{
  "errors": [
     "Projects name deve conter no mínimo 3 caracteres"
  ]      
}

如何在翻译文件中翻译项目名称 ,甚至从错误消息中删除 “Projects%atribute%”(没有任何黑客攻击)?

对于Rails 5.2,我必须检查核心代码,以发现它在嵌套属性的翻译中使用名称空间,如下所示:

  pt-BR:
    activerecord:
      attributes:
        user/projects:
          name: O nome de um projeto

因此,在'user / projects'节点中,您可以列出嵌套在User中的Project的属性。

如果您看到文档: http//guides.rubyonrails.org/i18n.html#error-message-scopes

请注意,错误名称空间与常规模型文本不同,您应该尝试在错误名称空间下添加模型和属性,以匹配activerecord.errors.models.[model_name].attributes.[attribute_name]

pt-BR:
  models_and_attributes: &models_and_attributes
    models:
      user: Usuário
      project: Projeto
    attributes:
      user:
        name: O nome
        description: A descrição
        projects: Os projetos
      project:
        name: O nome
  errors:
    format: "%{attribute} %{message}"
    <<: *models_and_attributes
  activerecord:
    <<: *models_and_attributes

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM