Witam,
Od kilku dni tworzę moją pierwszą aplikację webową w ror i natrafiłem na małą zagwozdkę.
Załóżmy, że mam aplikację, w której każdy anonimowy użytkownik może dodać coś w rodzaju ogłoszenia, które jest widoczne dla innych użytkowników odwiedzających stronę tak długo jak długo ten ma otwartą przeglądarkę.
Moim pomysłem jest aby dodać do ogłoszenia timestampa z czasem ważności ogłoszenia i jakoś go “magicznie” updatować np co minutkę z przeglądarki użytkownika.
Domyślam się że trzeba pewnie java skryptu użyć, którego za bardzo jeszcze nie znam, aby jakoś cyklicznie wysłać w tle info o aktywności użytkownika. Ale nie wiem za bardzo jak to zrobić i jak to sprzęgnąć z RORem. Proszę o wskazówki.
Na stronie, którą użytkownik musi mieć otwartą potrzebujesz dosłownie jedną linijkę javascripta.
Tak ogólnie i najprościej będzie coś typu:
(w htmlu)
<script>
setInterval( function() { $.post("/ads/update_timestamp/#{@ad.id}") }, 60000)
</sctipt>
Czyli co minutę uderzasz w swój kontroler, w metodę, której zadaniem jest np aktualizacja tego timestampa. Reszta dzieje się już po stronie RoR, czyli wyświetlanie ogłoszeń z w miarę nowym timestampem
Brzmi jak standardowy problem rozwiązywany przez ReactJS. Zobacz o co chodzi tutaj: http://facebook.github.io/react/docs/tutorial.html
Ogólnie jest to silnik stworzony przez FB pozwalający generować komponenty które aktualizują się w czasie rzeczywistym bez przeładowywania.
Skoro dopiero zaczynasz to do tworzenia realtime sugerowałbym sprawdzić Meteor’a (https://www.meteor.com/try) NodeJS+Mongo. To nie RoR, więc ma swoje wady, ale real time jest naprawdę prosty.
Oczywiście najprostsze rozwiązanie zostało już podane przez @Sevin
Dzięki za wskazówki i ciekawe linki. Na razie wystarczy mi rozwiązanie podane przez @Sevin . Chociaż mam z nim problem gdyż aplikacja żadnych błędów nie wywala ale i funkcja kontrolera się nie wykonuje
Jeden kolega mi podpowiedział, że być może nie mam JQuery zainstalowanego, więc jeszcze dziś wieczorkiem z tym powalczę.
jQuery łatwo sprawdzisz w konsoli przeglądarki, wpisz cokolwiek np. $('body')
jak rzuci błędem to nie masz jQuery.