2009-10-16 16 views
38

Podstawowym przypadkiem użycia jest przetwarzanie, ustawienie flash[:notice], a następnie przekierowanie do nowej strony. Z tego co wiem, przekierowania resetują tag Flash (proszę poprawić mnie, jeśli się mylę). Czy istnieje sposób na uzyskanie wytrwałości? Używanie sesji nie jest opcją i włamałem się do problemu za pomocą plików cookie, ale myślę, że musi być lepszy sposób.Uzyskiwanie wartości mieszania Flash w przypadku przekierowań

+0

Czy błysk [: Zawiadomienie] pojawiają się podczas renderowania, a nie przekierowanie? Czy na pewno ładowany jest standardowy układ? – EmFi

Odpowiedz

74

Funkcja mieszania flash działa dokładnie dla jednego przekierowania lub renderowania. Więc powinieneś mieć się dobrze z domyślnymi ustawieniami.

Jeśli chcesz zachować wartość skrótu lampy błyskowej dla innego żądania/przekierowania, możesz zadzwonić na flash.keep.

flash.keep # keep the entire flash hash around for an extra request. 
flash.keep(:notice) # keep just flash[:notice] for an extra request. 
+0

Czy jest jakiś możliwy powód, że nie zawsze jest to prawdą (np. Wyłączanie sesji)? Z pewnością nie jest tak w przypadku moich zastosowań (flash [: notice] powinien być wyświetlany jako część standardowego układu, ale nie jest widoczny, chyba że jest ustawiony przed renderowaniem, a nie przekierowaniem). –

+0

Co stanie się, gdy wyraźnie odwołasz się do flash [: notice] w widoku? – EmFi

+0

Po przekierowaniu? Nic. Jeśli nie ma żadnego przekierowania, widzę ten sam ciąg przypisany. –

1

Coś być świadomy w co najmniej Rails V3.2.1 jest to, że lampa będzie się utrzymywać przez przekierowanie jeśli jej nie odwołuje się w ogóle przez co najmniej 1 przekierowanie i po załadować ten sam widok. Jest to kod pseudo moich ostatnich doświadczeń:

def some_action 

(code that may set a flag to redirect 1 time) 

redirect_to action_path if(redirect_flag) 
.... 
end 

Running to doprowadziłoby do zapłonu [: wiadomość] występuje niezależnie od przekierowania.

def some_action 
logger.debug("Flash[:message] #{flash[:message]}") 

(code that may set a flag to redirect 1 time) 
redirect_to action_path if(redirect_flag) 
.... 
end 

Podczas debugowania z rejestratorem odwołującym się do lampy błyskowej [] byłby wyświetlany tylko wtedy, gdy przekierowanie nie miało miejsca. Mogłem zobaczyć, że jest to problematyczne, jeśli dodałeś odwołanie do flasha przed przekierowaniem i utraciłeś je w linii bez wyraźnego powodu.

See Ruby docs tutaj (Instance protected method: Use at the bottom)

+0

Ah, dziękuję! Dodałem dane logowania, które zarejestrowały flash na poziomie żądania, i nie wiedziałem, dlaczego flash nie był już zachowywany przez wiele przekierowań. Wygląda na to, że jeśli chcesz coś takiego zrobić, możesz odczytać flash poprzez 'request.session ['flash']' (przynajmniej na Railsach 4) i nie przejdzie przez zwykły akcesor, co jest zwykle oznacza lampę błyskową jako odniesienie. – Ibrahim

Powiązane problemy