2011-04-23 14 views

Odpowiedz

67

Prawdopodobnie najprostszym sposobem, aby to zrobić jest

  1. Określ każdą wiadomość jako pusty ciąg
  2. Sprawdź długość łańcucha przed pokazać wiadomość flash.

W pliku devise.en.yml określić każdą wiadomość jako pusty:

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

itd. Następnie w układzie, sprawdzić pustych strunach błyskowych przed wami wyjściu nich.

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

Bardzo elegancki! Dla mojego opracowania (2.1.0) samo ustawienie ciągu znaków na "" sprawiło, że trik nie sprawdzał pustki? –

+1

Nawet po 4 latach to nadal działa: +1, dziękuję – Abhinay

-3

Devise obejmuje podręczny generator, aby skopiować wszystkie widoki w projekcie:

rails generate devise:views 

W ten sposób można zmieniać poglądy siebie i zdecydować, co chcesz zachować, czy wyrzucić (komunikaty Flash) .

+1

Wygląda jak odpowiedź na kolejne pytanie. Z tym nie można wyłączyć wiadomości flash. Zobacz odpowiedź Brandona. – Voldy

+1

Możesz wyświetlić wiadomości flash w każdym widoku, usuwając go. Ale wydaje się, że to pytanie zakłada, że ​​są w układzie. –

30

Odpowiedź lepiej nadaje się dla mnie było, aby zastąpić kontroler opracować sesji jak ta

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 

Ten bezpiecznie nadpisuje metodę tworzenia i niszczenia usuwając wiadomość bezpośrednią

+3

w Rails 4 i Devise 3.4.1, musiałem dodać to do tras: devise_for: users, controllers: {sessions: "sessions"} –

5

I byli w stanie je wyłączyć w danym kontrolerze nadrzędnymi is_flashing_format?:

def is_flashing_format? 
    false 
end 

Używam opracować 3.5.6

0

Dla Rails 5.0.6 ten kod będzie działał.

app/controllers/sessions_controller.rb

class SessionsController < Devise::SessionsController 

    def new 
    flash.clear 
    super 
    end 
end 

Nie zapomnij trasy.

config/routes.rb

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

Powiązane problemy