Ich arbeite an einem Projekt mit einem Rails API und einem iOS - Client, wobei das Feld aktualisiert_at als Referenz verwendet wird, um Änderungen auf dem Server zu erkennen letzter Zug vom Kunden.ActiveRecord: Millisekunden werden nicht berücksichtigt, wenn eine where - Klausel verwendet wird
Die updated_at Datetime hat eine Genauigkeit in Millisekunden bedeutet, dass
Model.updated_at.to_f
kehrt so etwas wie "1368977381,063427". Dies wird an den Client gesendet, der wie folgt formatiert ist: "2013-05-19T15: 29: 41.063427000Z".
Das Problem ist, wenn ich diese Datetime zurück vom Client, parse es und Abfrage mit ihm, die Millisekunden sind verloren.
last_update = DateTime.strptime("2013-05-19T15:29:41.063427000Z", "%Y-%m-%dT%H:%M:%S.%N%z")
Model.where("updated_at > ?", last_update)
ist so gut wie zu tun
last_update = DateTime.strptime("2013-05-19T15:29:41Z", "%Y-%m-%dT%H:%M:%S%z")
Model.where("updated_at > ?", last_update)
Als Ergebnis habe ich immer mindestens ein Ergebnis, wenn ich keine bekommen sollte, weil die Millisekunden abgeschnitten.
Wie kann ich diese in meiner Abfrage berücksichtigen? Versuchen
Lies es und dachte "Natürlich!" :) – Nycen
Mein Problem war, dass die Genauigkeit des Zeitstempels in der Datenbank auf 5 Dezimalstellen lag, während mein Client den Zeitstempel auf 3 Dezimalstellen speicherte ... wenn eine Größer als Abfrage ausgeführt wurde, würde immer derselbe Datensatz zurückgegeben wegen der zusätzlichen 2 Dezimalstellen. – JBlake
Ich bin überrascht, dass es keine nativere Möglichkeit gibt, Millisekunden in Rails zu unterstützen. : -/ –