2009-07-22 22 views
17

Nie mogę ustalić, dlaczego moje wiadomości flash znikają po przekierowaniu. Uruchomiłem debugger w moim widoku, a zmienna flash jest całkowicie pusta.Szyny, utrata błysku po przekierowaniu do

flash 
=> {} 

Wynik jest taki sam we flash.now ... Działa dobrze, jeśli edytuję coś i wywołuję render.

Kontroler: układ

def create 
    @user_session = UserSession.new(params[:user_session]) 
    if @user_session.save 
     flash[:notice] = "Logged in" 
     redirect_to root_url 
    else 
     render :action => 'new' 
    end 
    end 

Zastosowanie:

- flash.each do |name, msg| 
    =content_tag :div, msg, :class => "flash_#{name}" 

root_url jest inny kontroler i działanie.

+0

Czy używasz Rails 2.3.2? –

+0

i czy możesz opublikować kod kontrolera root/akcji, do której przekierowujesz? –

Odpowiedz

4

To była wtyczka render_component ... łamała tory 2.3.2. Dzięki i tak.

+1

Rozwiązałem ten problem, komentując dwie linie w kodzie render_component - linię z flash.discard i flash.sweep. Nie wiem, czy to było właściwe rozwiązanie, ale pozwala mi to w tej chwili iść do przodu. – Mario

+0

Witam, mam też ten sam problem i utknąłem na pół dnia. Piszę w ten sposób 'redirect_to new_user_session_url (subdomena: @ account.subdomain), zauważ: I18n.t ('accounts.create.success_confirmation ")' i, tracę moją wiadomość na sesjach/nowej stronie. Jednak podczas debugowania kontrolera widzę obiekt flash z kluczem i wartością notice. Mógłbyś rozwinąć więcej na temat render_component, co zrobiłeś. –

1

jeśli przekierować do innego użytku działanie lampy błyskowej a jeśli jesteś oddać samego zastosowania działań flash.now

24

Podczas korzystania z lampy błyskowej wiadomości funkcji, istnieją dwa sposoby wiadomości Wyświetlenie

natychmiast po tej samej stronie obciążenia, i dostępne w widoku od flash['foo']:

flash.now['foo'] = "Hello world" 

lub na przekierowanie do innej strony, a dojazd z flash['notice']:

redirect_to root_url, notice: "Hello world" 

Ruby on Rails Guides strona jest naprawdę dobra baza:

http://guides.rubyonrails.org/action_controller_overview.html#the-flash

1

Moja renderowania Flash nie działa dla root_url powodu mojej trasy. Adres root_url został przekierowany na inną stronę, na przykład root: to => redirect ("[SOME_OTHER_PAGE]"). Zamiast tego po prostu używam przekierowania do innego zasobu

7

Jeśli używasz podwójnego przekierowania (np. Przekierowanie do roota, które następnie przekierowuje do użytkownika), musisz przekazać flash.

def first_action 
    flash[:notice] = "Logged in" 
    redirect_to root_url 
end 

def second_redirect_action 
    redirect_to current_user, flash: flash 
end 
4

Właśnie wpadł tej kwestii również w Rails 4, a po walić głową w moim komputerze na chwilę, zauważyłem to w dziennikach Rails: Can't verify CSRF token authenticity.

Okazało się, przesyłam za pośrednictwem formularza, który nie ma tokena CSRF w nim. O dziwo, wciąż wywoływał moją metodę kontrolera i nadal robił przekierowanie, ale właśnie to wszystko wyrzucało.

Dodanie tokena CSRF do mojego formularza poprawiło to.

Powiązane problemy