Sto lavorando a un progetto con api rails e un client iOS, utilizzando il campo updated_at come riferimento per rilevare le modifiche sul server che si sono verificate dopo il ultimo tiro dal cliente.ActiveRecord: i millisecondi non vengono presi in considerazione quando si utilizza una clausola where
Il datetime updated_at ha una precisione in millisecondi, il che significa che
Model.updated_at.to_f
restituisce qualcosa come "1368977381,063,427 mila". Questo viene inviato al client formattato come "2013-05-19T15: 29: 41.063427000Z".
Il problema è che quando ottengo quel datetime dal client, lo analizzo e lo interrogo, i millisecondi vengono persi.
last_update = DateTime.strptime("2013-05-19T15:29:41.063427000Z", "%Y-%m-%dT%H:%M:%S.%N%z")
Model.where("updated_at > ?", last_update)
è buono come fare
last_update = DateTime.strptime("2013-05-19T15:29:41Z", "%Y-%m-%dT%H:%M:%S%z")
Model.where("updated_at > ?", last_update)
Di conseguenza, ho sempre arrivare almeno un risultato quando dovrei ottenere nessuno, perché i millisecondi vengono troncati.
Come posso tenerne conto nella richiesta?
Leggilo e pensa "Certo!" :) – Nycen
Il mio problema era che la precisione del timestamp memorizzato nel database era di 5 cifre decimali, mentre il mio cliente stava memorizzando il timestamp a 3 cifre decimali ... quando si eseguiva un numero maggiore di query, avrebbe sempre restituito lo stesso record a causa dei 2 posti decimali in più. – JBlake
Sono sorpreso che non ci sia un modo più nativo per supportare i millisecondi in Rails. : -/ –