Devise / Rails - Как удалить конкретное флеш сообщение? (Успешно зарегистрирован) - PullRequest
38 голосов
/ 04 ноября 2010

Используя Devise, я хотел бы знать, есть ли способ удалить конкретное флэш-сообщение?(Успешный вход).

Мне важны другие сообщения в представлении, так что это только для входа и выхода.Надо было перезаписывать контроллер или есть другой способ?

Спасибо!

Ответы [ 8 ]

59 голосов
/ 04 ноября 2010

Вы просто определяете это для пустой строки в вашем локальном файле. В этом случае вы ничего не видите.

39 голосов
/ 04 ноября 2010

Хорошо!

Как сказал Шингара, я определяю пустую строку в devise.en.yml

sessions:
  signed_in: ''

и я также немного изменяю следующую строку (предоставленную nifty-генераторами):

<% flash.each do |name, msg| %>
  <%= content_tag :div, msg, :id => "flash" if msg.length > 0 %>
<% end %>

Таким образом, мой CSS не появляется.

8 голосов
/ 18 сентября 2015

Другой гибкий способ сделать это - сбросить уведомление после действия:

class SessionsController < Devise::SessionsController
  after_action :remove_notice, only: :destroy

  private

  def remove_notice
    flash[:notice] = nil
  end
end

С помощью этого решения вы можете добавлять условия для удаления уведомления или нет.

8 голосов
/ 17 мая 2012

Пустая строка в файле локали (как предложено выше), но также добавьте следующий фрагмент CSS, чтобы скрыть (вместо обезьяны с вашими флэш-видами)

.flash.alert:empty {
  display: none;
}
4 голосов
/ 20 февраля 2017

Другой способ, если вы переопределите контроллер Devise, в действии create вставьте этот код, который удаляет флэш-сообщение:

class MyDevise::SessionsController < Devise::SessionsController

  # POST /resource/sign_in
  def create
    super
    flash.delete(:notice)
  end

  # DELETE /resource/sign_out
  def destroy
    super
    flash.delete(:notice)
  end

end

, на который был дан ответ в другом вопросе SO.1005 * Сообщение о том, как переопределить контроллер Devise, см. В моем сообщении в блоге

.
3 голосов
/ 17 марта 2015

С моей точки зрения, я не вижу смысла очищать перевод строки, когда вы можете легко изменить работу контроллера.Я думаю, что этот способ гораздо более правильный и удовлетворительный.

Лучшим ответом может быть переопределение метода уничтожения в sessionController.

Просто создает файл, расположенный в: app / controllers / session_controller.rb

Как видите, мы комментируем строку, создающую флэш-сообщение.

class SessionsController < Devise::SessionsController 
  # DELETE /resource/sign_out
  def destroy
    signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
    #set_flash_message :notice, :signed_out if signed_out && is_flashing_format?
    yield if block_given?
    respond_to_on_destroy
  end
end
2 голосов
/ 03 мая 2016

Я думаю, что devise теперь понимает, что если вы измените сообщение об ошибке в config/locals/devise.en.yml на пустую строку, оно автоматически проигнорирует его. По крайней мере, это то, что работало со мной.

0 голосов
/ 23 мая 2016

Вы можете сделать это. Пожалуйста, измените тип условия и тип вспышки соответственно.

flash.delete (: alert) if flash [: alert] == ​​"Прежде чем продолжить, необходимо войти в систему или зарегистрироваться." @drivers = params [: ключевое слово] .blank? ? []: Driver.find (params [: ключевое слово])

Вы можете сделать это до фильтра.

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