设计activerecord错误自定义消息及其翻译

时间:2020-01-10 11:32:24

标签: ruby-on-rails devise

我正在尝试自定义activerecords错误消息。这是我所拥有的:

我的错误消息部分文件app / views / devise / shared / _error_messages.html.erb:

<% if resource.errors.any? %>
  <div id="error_explanation" class="verd14 pl-2 pr-2">
      <%= I18n.t("errors.messages.not_saved",
                 count: resource.errors.count,
                 resource: resource.class.model_name.human.downcase)
       %>
    <ul>
      <% resource.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
    </ul>
  </div>
<% end %>

我的YML文件:

pl:
  activerecord:
    errors:
      models:
        user:
          attributes:
            email:
              blank: "blah blah blah"

但是显示的错误消息包含更多内容。它显示:

用电子邮件等等等等

那是为什么?为什么在翻译开始时显示“电子邮件”字样,以及如何在不创建我自己的验证的情况下摆脱此额外的“电子邮件”字符串?

这是我在阅读stackoverflow上连接的所有内容时发现的:

ActiveModel :: Errors#full_messages将属性名称添加到 使用分隔符的错误消息,该分隔符将从 errors.format(默认为“%{attribute}%{message}”)。

但是我不知道如何格式化我的YML文件。请支持

2 个答案:

答案 0 :(得分:1)

“为什么?为什么在翻译开始时显示'Email'字?”

这就是full_messages方法默认工作的方式(默认格式为"%{attribute} %{message}")。

您可以使用以下任何I18n键进行更改:

activemodel.errors.models.user.attributes.email.format
activemodel.errors.models.user.format
errors.format

查看文档以获取更多信息:https://apidock.com/rails/v6.0.0/ActiveModel/Errors/full_message

编辑:您的yml文件中的内容如下:

pt:
  activemodel:
    errors:
      user:
        attributes:
          email:
            blank: 'bla bla bla'
            format: '%{message}'

答案 1 :(得分:0)

<% resource.errors.values.each do |message| %>
        <li><%= message[0] %></li>

以我的情况工作