Observer ? Page Reload-after_save

Witam,

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 ?

z gory dziekiuje za info
pozdrawiam

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.

jest kilka mozliwosci, no ogolnie interesuje cie:

  • flash
  • JS
  • HTML5

wszystkie ona maja taka technologie, niektore dzialaja tylko w najnowszych wersjach chrome, czy safari!



http://www.ape-project.org/
http://github.com/gimite/web-socket-js

standardowa rzeczą jest comet z JS np

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

http://blog.new-bamboo.co.uk/2010/2/10/json-event-based-convention-websockets

jest jeszcze to i działa:
http://github.com/jcoglan/faye

bo WebSockety to bym raczej narazie odpuścił

pozdrawiam

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 ?

Model.find(:first, :conditions=>["updated_at > ?", tutaj_wstaw_date_kiedy_gosc_sie_pojawil_na_stronie ])

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