Подтвердить что ты не робот

Выборочное отключение уведомления об отключении в Rails 3

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

Мне интересно, какой простой способ выборочно отключить некоторые уведомления об ошибках Devise в моем приложении Rails 3. В частности, я хотел бы избавиться от явно очевидных отметок signed_in и signed_out.

В некоторых поисках предлагается подклассифицировать контроллер сеанса или использовать что-то вроде этого, но я не смог найти простых решений этой проблемы.

4b9b3361

Ответ 1

Вы можете настроить свои флеш-сообщения с поддержкой I18n, которые поддерживают. Если вы не установили ничего для конкретного ключа, пустое флеш-сообщение не будет отображаться, например, для sign_in и sign_out:

en:
  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: 'Invalid email or password.'
      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_out: ""

UPD.

Вы не должны удалять ключ, иначе вы получите сообщение об ошибке. Чтобы не отображать пустые флеш-сообщения, вы должны выполнить простую проверку в представлении (например, с помощью haml):

- unless notice.blank? && alert.blank?
  #flash
    .wrapper
      - unless notice.blank?
        %p.notice= notice
      - unless alert.blank?
        %p.alert= alert

Ответ 2

Лучший способ скрыть пустые флеш-сообщения: если ваше сообщение находится в div с классом "уведомление" или "ошибка", CSS3 позволяет создать такой стиль:

.notice:empty {
  display: none;
}

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