Lassen Sie uns ein Szenario nehmen:Wie kann ich den Wert in Schienen regelmäßig abrufen/aktualisieren?
counter 10 seconds
- Benutzer besucht
show.html.erb
Seite show.html.erb
den Wert vondatabase
<%= @post.value %>
mit holen.- Zähler gestartet und jede Iteration des Zählers ist für
10 seconds
. - Nach jeder
10 seconds
Ich wollte die@post.value
mitutility
Klasse ändern. - aktualisieren Sie die
@post.value
in der Datenbank. - die
show.html.erb
automatisch aktualisieren und<%= @post.value %>
wird den aktualisierten Wert - Above Prozess zeigen wird, bis der Benutzer bewegen sich zu anderen Seiten im Schleife ausgeführt werden.
Wenn ich das Problem in Code zu vereinfachen haben, dann wäre es dieses mag:
Ansicht Seite
<%= @post.value %>
<%= @post.name %>
Controller-Methode
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
Utility-Klasse
I möchte die post.value
auf th aktualisieren e Basis der in dieser Klasse geschriebenen Methode. Pseudo-Code:
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
Fragen
- Wo muss ich den Zähler setzen? Client-Seite oder Server-Seite? Ich möchte
background jobs
nicht in Schienen verwenden. - Welche Änderungen muss ich in
show
Methode vornehmen, so dass nach jeder Intervallseite wird automatisch aktualisiert und übergeben Sie den aktualisierten Wert in@post.value
?
Vielen Dank für Ihre Hilfe!
Ich glaube, Sie könnten bessere Antworten bekommen, wenn Sie beschreiben, was Sie ist tatsächlich zu tun versuchen - sind Sie eine Ansicht Zähler hinzufügen wollen? Oder bieten Sie eine Form von Live-Updates an? Versuchen Sie, es vom Standpunkt des Benutzers aus zu beschreiben. – max
@AmitPal: Frage 2 und 3 sind verwirrend, denken Sie an beide oder an beide? Wenn Sie die Seite regelmäßig alle 10 Sekunden aktualisieren, ist das Aktualisieren eines bestimmten Werts mit ajax nicht sinnvoll. Außerdem können Sie den Wert von <% = @ post.value%> 'nicht in der Ansicht aktualisieren. Sie können das HTML-Fragment aktualisieren, wenn dieser Wert auf der Seite gerendert wird. Willst du das sagen? Fehle ich etwas? – Surya
@Surya Ja, ich denke eine von ihnen oder jede Annäherung, die besser ist. Ja, Sie haben Recht bezüglich des 'HTML' Renderings. Ich habe nicht daran gedacht, dass 'Ajax' in diesem Fall nicht funktionieren wird. Letztendlich bin ich auf der Suche nach einem Weg, durch den ich den 'post.value' in regelmäßigen Abständen (nach Conunter) mit der angegebenen' Utility'-Klassenmethode aktualisieren kann, bis der Benutzer die Seite besucht. Sagen wir @ ersten Besuch: Zähler Start und '@ post.value' = 3 den Wert in der Datenbank aktualisieren und den neuen Wert in der HTML-Ansicht nach dem automatischen Aktualisieren der Seite Warten Sie 10 Sekunden und fahren Sie mit dem obigen Verfahren fort –