Разработать activerecord ошибок пользовательских сообщений и их перевод - PullRequest
1 голос
/ 10 января 2020

Я пытаюсь настроить сообщения об ошибках 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"

Но представленное сообщение об ошибке содержит нечто большее. Он показывает:

Электронная почта бла-бла-бла

Почему это так? Почему он показывает слово «Email» в начале перевода и что нужно сделать, чтобы избавиться от этой дополнительной строки «Email», не создавая мои собственные проверки?

вот что я нашел, прочитав все, что связано со stackoverflow :

ActiveModel :: Errors # full_messages добавляет имя атрибута к сообщению об ошибке, используя разделитель, который будет найден в файле errors.format (и по умолчанию "% {attribute}% {message}" ").

но я не знаю, как отформатировать мой файл YML. Пожалуйста, поддержите

Ответы [ 2 ]

1 голос
/ 11 января 2020

«Почему это так? Почему в начале перевода отображается слово« 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}'
0 голосов
/ 10 января 2020
<% resource.errors.values.each do |message| %>
        <li><%= message[0] %></li>

работает в моем случае

...