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

Devise/Rails - Как удалить конкретное флэш-сообщение? (Подпись успешно)

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

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

Спасибо!

4b9b3361

Ответ 1

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

Ответ 2

Ok!

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

sessions:
  signed_in: ''

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

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

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

Ответ 3

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

.flash.alert:empty {
  display: none;
}

Ответ 4

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

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

  private

  def remove_notice
    flash[:notice] = nil
  end
end

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

Ответ 5

Другой способ: если вы переопределите контроллер 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. Для сообщения в блоге о том, как переопределить контроллер Devise, см. мой пост в блоге

Ответ 6

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

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

Просто создает файл, помещенный в: app/controllerlers/sessions_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

Ответ 7

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

Ответ 8

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

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

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