intersuje mnie informacja o observerach poniwaz chcialbym zastosowac takiego observera u mnie w aplikacji tylko nie wiem czy do konca poprawnie rozumiem funkcjonalnosc samego observera.
jest 2 uzytkowników jeden z nich ma wyswietloną liste rekordow z bazy a drugi wlasnie dodaje kolejny rekord do bazy, chcialbym aby po dodaniu tego rekordu uzytkownikowi nr 1 przeladowala sie strona i wyswietlila aktualna liste rekordow.
W chwili obecnej dziala to na zasadzie periodically_call_remote - strona odswieza sie co kilka sekund.
Rozumiem ze jest taka mozliwość zeby observer skierowac na model i after save wykonac pewne akcje - interesuje mnie to czy jest taka możliwośc zeby on przeladowal strone ? i zeby on nie przekierowal każdej osoby używającej aplikacji do listy rekordów a tylko zeby odsiwezyl widok tym ktorzy obecnie przegladaja liste.
I czy jest sens pisac observera czy periodically_call_remote moze zostac ? czy takie przeladowanie co kilka sekund moze negatywnie wplynąc na prędkość dzialania aplikacji ? a może ma to jakis inny negatywny wplyw ?
ActiveRecord::Observer obserwuje konkretne modele, ale nie może zmieniać Ci innych warstw. Z modelu też nie masz dostępu do sesji. Z observera nie możesz dać redirect_to, render itp. Nie ta warstwa. Albo przynajmniej nie w tak prosty sposób.
Obsever w modelu i observer w prototypie nie mają ze sobą zbyt wiele wspólnego.
Twój problem z tego co wiem można rozwiazać dwojako:
przez peridically call remote (korzystałem) i wysyłanie jakiegoś prostego requesta do bazy
w jednej aplikacji napisalem do tego metala i działał calkiem sprawnie
goście z 37 signals mieli tak rozwiazany problem z ich chatem bodajze w basecampie (pozniej przepisali to do erlanga)
druga opcja to reversed AJAX, albo push AJAX (polecam google)
jest jeszcze trzecia ale na tyle świeża, że do produkcji się chyba nie nadaje:
mianowicie web sockets
Zakładając ze uzywam periodically call remote - i co kilka sekudn wywoluje find.all - wiec co kilka sekund wykonuje przeladowanie mimo tego ze nie nastąpiły zmiany. Czy powinienem raczej najpierw co kilka sekund sprawdzać czy nastąpiły zmiany, jesli tak to dopiero wtedy przeładowac ?
jak zwróci nila, to nic sie nie zmieniło
jak zwróci coś innego, znaczy że nastąpiła zmiana i musisz załadować jakies dane. W Twoim przypadku przeładować strone