1

我希望能够提供国际化、有用的错误消息。

我有一个用于嵌套表单提交的通用错误消息部分视图渲染

    # _error_messages.html.erb - Fragment
    ...

    <strong><%= t('errors.template.body') %> </strong>       
    <ul>
      <% object.errors.full_messages.each do |msg| %>
        <li><%= msg %> </li>
      <% end %>
    </ul>

    ...

我收到了国际化的正文消息,但是,尽管进行了多次 yaml 迭代,但我无法弄清楚如何替换该属性,或者更具体地说,该模型字段(即 validates_presence_of :name)验证的“:空白”错误。

这是我的 yaml 中的一个片段

en:
  errors: &errors
    format: ! '%{attribute} -- %{message}'
      messages:
        accepted: must be accepted
        blank: must not be blank
        body: ! 'There were problems with the following fields:'


    activemodel:
        attributes:
          family_wizard: 
            children: kids

我这样写了yaml,因为当我检查传递给部分的错误对象时,我将孩子的姓名字段留空(:validates_presence_of:name)看起来像这样:

#<ActiveModel::Errors:0x007111111C111111 @base=#<FamilyWizard id: nil, ...>, 
    @messages {:children=>["must not be blank"]}>

但我能得到的唯一错误信息是:

以下字段存在问题:

  • 孩子——不能为空

理想的解决方案错误消息如下所示:

以下字段存在问题:

  • 孩子——名字不能为空

这个 Stack Overflow 问题(How to localize a generic error messages partial in Rails 3.2.3?)在正确的轨道上,但它缺少我想要的 activemodel/activerecord 验证部分。

4

1 回答 1

0

这个问题的答案是因为我的 yaml 文件有两个问题,所以我的范围有误。错误的间距和错误的标签。它应该是 activerecord 而不是 activemodel,并且 activerecord 范围应该与树中的错误范围处于同一级别。

要翻译模型的属性(即,Children to Kids),yaml 看起来像这样:

en:
  errors: &errors
    format: ! '%{attribute} -- %{message}'
      messages:
        accepted: must be accepted
        blank: must not be blank
        body: ! 'There were problems with the following fields:'


  activerecord:
    attributes:
      family_wizard: 
        children: kids

帮助我得到答案的两个资源是:

于 2013-04-24T16:57:41.567 回答