2014-04-04 10 views
8

Sto provando ad elencare i record per una vista delle posizioni dei record recentemente creati o aggiornati delle ultime 24 ore utilizzando activerecord ma sono uno sviluppatore principiante che ha bisogno di aiuto.Elenco rails creato/record aggiornati nelle ultime 24 ore

Qualcuno conosce una soluzione per l'implementazione di questo nel controller/vista? Grazie in anticipo per l'aiuto.

risposta

23

Dal momento che si sta utilizzando Rails, vi si presuppone che questi file, che corrisponde ad una risorsa Sedi:

app/views/locations/index.html.erb 
app/controllers/locations_controller.rb 
app/models/location.rb 

ci sono alcune alternative ActiveRecord per interrogare i record nelle ultime 24 ore:

  1. Questo esempio dimostra il concetto che è possibile specificare un intervallo per l'interrogazione delle colonne timestamp.

    @locations = Location.where(updated_at: (Time.now - 24.hours)..Time.now) 
    
  2. Come sottolineato nei commenti qui sotto, ci può essere una frazione di secondo errore di precisione con query precedente. È possibile memorizzare una variabile, now = Time.now, per garantire che la query si estenda esattamente per 24 ore.

    now = Time.now 
    @locations = Location.where(updated_at: (now - 24.hours)..now) 
    
  3. Si potrebbe eliminare l'operazione di sottrazione e lasciare Rails gestire per voi, che può anche tradursi in un offset da una finestra esatto di 24 ore leggera.

    @locations = Location.where(updated_at: 24.hours.ago..Time.now) 
    
  4. Si può anche rinunciare alla sintassi di hash nei parametri where, passando una stringa SQL che filtra con l'operatore > confronto.

    @locations = Location.where('updated_at > ?', 24.hours.ago) 
    

nel controller, aggiungere un'azione di indice, con il suo approccio interrogazione preferita:

def index 
    @locations = Location.where(updated_at: 24.hours.ago..Time.now) 
end 

Secondo lei, aggiungere queste righe:

<table> 
    <thead> 
    <tr> 
     <th>Id</th> 
     <th>Name</th> 
     <th>Created_At</th> 
     <th>Updated_At</th> 
    </tr> 
    </thead> 
    <tbody> 
    <% @locations.each do |location| %> 
     <tr> 
     <td><%= location.id %></td> 
     <td><%= location.name %></td> 
     <td><%= location.created_at %></td> 
     <td><%= location.updated_at %></td> 
     </tr> 
    <% end %> 
    </tbody> 
</table> 
+0

perché 120.day ? La domanda è stata modificata? –

+0

No, non lo era. Quello era solo un altro esempio casuale. Ho aggiornato la risposta per utilizzare "24.ora" per accordo con la Q. Grazie per il controllo! – sealocal

+0

Funziona anche: 'Location.where (updated_at: 1.day.ago..Time.now)' – Adobe

Problemi correlati