Domanda Rails Disabilita i messaggi flash elaborati


Come posso disattivare tutti i messaggi flash della gemma Devise ("accesso eseguito correttamente", "disconnesso")? Grazie.


44
2018-04-23 07:02


origine


risposte:


Probabilmente il modo più semplice per farlo è quello di farlo

  1. Definisci ciascun messaggio come una stringa vuota
  2. Controlla la lunghezza della stringa prima di mostrare un messaggio flash.

Nel tuo devise.en.yml file, specificare ogni messaggio come vuoto:

en:
  errors:
    messages:
      not_found: ''
      already_confirmed: ''
      not_locked: ''

ecc. Quindi, nel tuo layout, controlla le stringhe vuote prima di emetterle.

<% flash.each do |key, value| %>
  <%= content_tag :div, value, :class => "flash #{key}" unless value.blank? %>
<% end %>

70
2018-04-23 07:10



Una risposta più adatta per me era quella di scavalcare il Devise Session Controller in questo modo

class 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

Questo sostituisce in modo sicuro il metodo di creazione e distruzione che rimuove il messaggio flash


31
2017-09-15 16:12



Sono stato in grado di disabilitarli in un determinato controller sovrascrivendo is_flashing_format?:

def is_flashing_format?
  false
end

Sto usando Devise 3.5.6


5
2017-07-17 06:16



Per Rails 5.0.6 questo codice funzionerà.

app/controllers/sessions_controller.rb

class SessionsController < Devise::SessionsController

  def new
    flash.clear
    super
  end
end

Non dimenticare i percorsi.

config/routes.rb

devise_for :users, controllers: { sessions: 'sessions' }


0
2017-12-08 17:12



Questo lavoro per me:

# app/controllers/users/sessions_controller.rb
class Users::SessionsController < Devise::SessionsController
  after_action :remove_notice, only: [:destroy, :create]

  private

  def remove_notice
    flash.discard(:notice) #http://api.rubyonrails.org/v5.1/classes/ActionDispatch/Flash/FlashHash.html#method-i-discard
  end
end

# add this line in 'config/routes.rb'
devise_for :users, :controllers => { sessions: 'users/sessions' }

Io uso Users::SessionsController ma puoi usare SessionsController, Ho solo un modello di sviluppo in questo esempio.

Io uso flash.discard(:notice) ma puoi usare flash.discard rimuovere altri tipi nello stesso tempo. (metodo scarto esistono dal rails 3.0)

Preferisco questo approccio, perché non è il ruolo della vista per verificare se il tuo messaggio flash è vuoto. Se hai un messaggio flash, stampalo! Se non vuoi, quindi non creare un messaggio flash ;-)


0
2018-04-10 07:53



Devise include un pratico generatore per copiare tutte le viste nel tuo progetto:

rails generate devise:views

In questo modo puoi modificare te stesso le viste e decidere cosa vuoi tenere o buttare via (messaggi flash).


-3
2018-04-23 10:48