Wykonanie akcji po zalogowaniu sie

Witajcie,

Wchodze jako niezalogowany user na strone, widze formularz dodawania komentarza, wypelniam w pocie czola, klikam submit i zostaje przekierowany na strone logowania z bledem ze mam to low permissons dla tej action. Loguje sie wiec, i ponownie widze strone z formularzem, lecz pustym (wiadomo).

Jak jednak zrobic, aby po poprawnym zalogowaniu mnie, wykonac akcje z parametrami, ktore probowalem wykonac wczensiej, czyli de facto jak i gdzie zapamietac parametry i request method, oraz jak je potem wywolac ?

Pozdrowienia

[quote=astropanic]Witajcie,

Wchodze jako niezalogowany user na strone, widze formularz dodawania komentarza, wypelniam w pocie czola, klikam submit i zostaje przekierowany na strone logowania z bledem ze mam to low permissons dla tej action. Loguje sie wiec, i ponownie widze strone z formularzem, lecz pustym (wiadomo).

Jak jednak zrobic, aby po poprawnym zalogowaniu mnie, wykonac akcje z parametrami, ktore probowalem wykonac wczensiej, czyli de facto jak i gdzie zapamietac parametry i request method, oraz jak je potem wywolac ?

Pozdrowienia[/quote]
W sesji. Albo w ukrytym polu na formularzu logowania. Nie ma ‘jedynie słusznej drogi’. Sesja będzie wygodna ale zazwyczaj ograniczona rozmiarowo.

Chyba sie niejasno wyrazilem, moj blad.

Chodzi o to ze masz standardowy mechanizm autoryzacji, ktory w przypadku braku uprawnien, zapamietuje gdzie ostatnio byles, i po zalogowaniu Cie tam z powrotem przekieruje, to sie swietnie sprawdza dla akcji z metoda get, ale jak potem, po poprawnym zalogowaniu sie, wykonac metode post ? Chocby utworzenie komentarza.

Wyobraz sobie ze piszesz spolecznosciowke i masz tam mase takich formularzy, chocby komentarze, dodawanie zdjec, ich ocena…

Zwykle redirect_to(session[:remembered_action]) w tym wypadku nie wystarczy. Chodzi mi o to jak tego typu kwestie sie rozwiazuje.

Pozdrowienia

Masz pewnie jakąś akcję typu require_login, która jest w stanie przekierować Cię za pomocą javascriptu. Dopisz do przekierowania parametry GET, a później w kontrolerach łap te parametry i uzupełniaj pola w widoku.

Po prostu usuń możliwość komentowania niezalogowanym użytkownikom. Zamiast formatki do komentawania, pokaż link do logowania. Po zalogowaniu użytkownik wraca na tą samą stronę i może komentować.

Najprościej rozwiązać poprzez sesje, jeśli nie są to duże dane.

Konkretnie to zapraszam na http://jamesgolick.com/2008/7/27/introducing-activepresenter-the-presenter-library-you-already-know.html i dostępny gem na http://github.com/jamesgolick/active_presenter
Podobnie można też w ten sposób http://blog.new-bamboo.co.uk/2007/8/31/presenters-conductors-on-rails

Osobiście używam active_presenter, dzięki temu możesz rozwiązać swój problem. Presenter.y służą też np. do tworzenia wielostronicowych rejestracji (wizardy) na wielu modelach zapisując zserializowane dane w sesji w bazie.
Na Twoje potrzeby idealnie się to sprawdzi.

A co do tego,

Moim zdaniem, źle podchodzisz do tematu. Obrabiasz formularz w trakcie, przed logowaniem. Po zalogowaniu zapisujesz wcześniej zwalidowany model/modele Presenter.a.
Jeśli Presenter to trochę za dużo to pozostań na utworzonej sesji zapisując zserializowane dane, a później po zalogowaniu zapisz je w bazie.

Czasami może jednak lepiej nie kombinować i wybierać najprostsze rozwiązania nie tak oczywiste, co już trafnie zaznaczył @tjeden

Polecam w między czasie poczytać o Presenter.ach.