Weźmy scenariusz:Jak okresowo pobierać/aktualizować wartość w szynach?
counter 10 seconds
- Użytkownik odwiedził
show.html.erb
stronę show.html.erb
pobrać wartość zdatabase
korzystając<%= @post.value %>
.- Uruchomiono licznik i każda iteracja licznika jest dla
10 seconds
. - Po każdym
10 seconds
chciałem zmienić klasę@post.value
przy użyciu klasy . - zaktualizować
@post.value
w bazie danych. - Odśwież
show.html.erb
automatycznie i<%= @post.value %>
pokaże zaktualizowaną wartość - powyższy proces będzie prowadzony w pętli aż do obsługi przejść do innych stron.
Jeśli mam na celu uproszczenie problemu w kodzie wtedy byłoby słuszne:
widoku strony
<%= @post.value %>
<%= @post.name %>
metody kontrolera
def show
@post = Post.find(params[:id])
end
def update
.... #It's empty right now
end
def fetching_value_from_PostUpdate(current_value)
.. # Now I need to update the value in database
end
klasy Utility
I chcesz zaktualizować post.value
na th e podstawie metody napisanej w tej klasie. pseudokod:
class PostUpdate
@@instance_variable
def initialize(post_value)
@@instance_variable = Marshal.load(Marshal.dump(post_value))
end
#Method required to calculate the value
def update_data_in_database
...
return data
end
Pytania
- Gdzie mam umieścić licznik? po stronie klienta lub po stronie serwera? Nie chcę używać
background jobs
w szynach. - Jakie zmiany należy wprowadzić w metodzie
show
, aby po każdym interwale strona odświeżała się automatycznie i przekazywała zaktualizowaną wartość w@post.value
?
Dzięki za pomoc!
Myślę, że można uzyskać lepsze odpowiedzi, jeśli można opisać to, co jest w rzeczywistości próbuje zrobić - próbujesz dodać licznik widzenia? Lub podać jakąś formę aktualizacji na żywo? Spróbuj opisać to z punktu widzenia użytkowników. – max
@AmitPal: Pytanie 2 i 3 są mylące, czy myślisz o jednym z nich, czy obu? Jeśli odświeżasz stronę okresowo co 10 sekund, to aktualizacja konkretnej wartości za pomocą ajaxa nie ma sensu. Ponadto nie można zaktualizować wartości '<% = @ post.value%> w widoku, można zaktualizować fragment HTML, w którym ta wartość jest renderowana na stronie. Czy to właśnie próbujesz powiedzieć? czy czegoś brakuje? – Surya
@Surya Tak, myślę, że jeden z nich lub jakiekolwiek podejście, które jest lepsze. Tak, masz rację co do renderowania "HTML". Nie sądzę, że "Ajax" nie zadziała w tym przypadku. Ostatecznie szukam sposobu, dzięki któremu będę mógł okresowo aktualizować 'post.value' (jak na conuntera) przy użyciu podanej metody' utility' class till user odwiedza stronę. Powiedzmy, że pierwsza wizyta: licznik startu i '@ post.value' = 3 zaktualizuje wartość w bazie danych i wyrenderuje nową wartość w widoku HTML po automatycznym odświeżeniu strony Poczekaj 10 sekund i kontynuuj powyższy projekt –