Настройка сообщений об ошибках Devise в Rails 3? - PullRequest
9 голосов
/ 30 апреля 2011

Я использую devise для обработки аутентификации.В целом мне это нравится, но я бы хотел немного настроить отображение ошибок.Прямо сейчас у меня есть следующее на мой взгляд:

<div class="field <% if resource.errors[:email].present? %>error<% end %>">
  <%= f.label :email, "Email:" %><br />
  <% if resource.errors[:email].present? %>
    <ul>
      <% resource.errors[:email].each do |msg| %>
        <li><%= msg %></li>
      <% end %>
    </ul>
  <% end %>
  <%= f.text_field :email, :class => "text" %>
</div>

Но когда есть проблема с электронной почтой, сообщение отображается следующим образом: is invalid.Это не очень удобно для пользователя, но я не могу найти, где это сообщение устанавливается.Похоже, это не в devise.en.yml, но, возможно, я что-то упускаю.

Есть идеи, где я могу настроить сообщения об ошибках?

Спасибо!

Ответы [ 3 ]

28 голосов
/ 30 апреля 2011

Вы можете настроить сообщения об ошибках в файле locales по адресу: / config / locales / devise.en.yml

Который должен иметь что-то вроде приведенного ниже кода и который вы можете легко изменить по своему вкусу:

en:  
  errors:  
    messages:  
      not_found: "not found"  
      already_confirmed: "was already confirmed"  
      not_locked: "was not locked"  

  devise:  
    failure:  
      unauthenticated: 'You need to sign in or sign up before continuing.'  
      unconfirmed: 'You have to confirm your account before continuing.'  
      locked: 'Your account is locked.'  
      invalid: 'OH NOES! ERROR IN TEH EMAIL!'  
      invalid_token: 'Invalid authentication token.'  
      timeout: 'Your session expired, please sign in again to continue.'  
      inactive: 'Your account was not activated yet.'  
    sessions:  
      signed_in: 'Signed in successfully.'  
      signed_out: 'Signed out successfully.'  

Для более подробного объяснения, посмотрите этот url (со скриншотами). Раздел Настройка сообщений об ошибках , в статье.

9 голосов
/ 02 сентября 2013

Если вы хотите изменить сообщения для таможенных проверок, добавленных устройством, отметьте Ответ Кристиана .

В противном случае, если проверка, которую вы хотите настроить, является стандартной проверкой, такой как формат электронной почтыВам не нужно удалять валидации Devise и заменять их собственными.Лучший способ справиться с этим - использовать приоритет сообщений об ошибках по умолчанию, перечисленных в Руководствах по Rails , и переопределить сообщение об ошибке для определенного поля и конкретной проверки.

Для этого конкретноговопрос, ключ, который необходимо добавить в config/locales/en.yml, чтобы изменить is invalid с помощью специального сообщения об ошибках электронной почты, - activerecord.errors.models.user.attributes.email.invalid (где user - название модели):

en:
  activerecord:
    errors:
      models:
        user:
          attributes:
            email:
              invalid: "custom invalid message"

Rails будет искать сообщение для проверки в следующем порядке:

activerecord.errors.models.[model_name].attributes.[attribute_name]
activerecord.errors.models.[model_name]
activerecord.errors.messages
errors.attributes.[attribute_name]
errors.messages
8 голосов
/ 30 апреля 2011

Все эти проверки определены в модуле validations и используют стандартные сообщения об ошибках Rails.

Вы можете переопределить их в своей модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...