2014-04-04 11 views

Odpowiedz

23

Ponieważ używasz Rails, będę zakładać, że masz te pliki, co odpowiada Lokalizacje zasobu:

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

Istnieje kilka alternatyw ActiveRecord dla zapytań rekordy w ciągu ostatnich 24 godzin:

  1. W tym przykładzie przedstawiono koncepcję, w której można określić zakres dla zapytań o kolumny znaczników czasowych.

    @locations = Location.where(updated_at: (Time.now - 24.hours)..Time.now) 
    
  2. Jak zauważył w komentarzach poniżej, mogą być ułamek sekundy błędu precyzji z powyższym zapytaniu. Możesz przechowywać zmienną, now = Time.now, aby upewnić się, że Twoje zapytanie obejmuje dokładnie 24 godziny.

    now = Time.now 
    @locations = Location.where(updated_at: (now - 24.hours)..now) 
    
  3. Można wyeliminować operację odejmowania i niech Szyny obsługiwać go za ciebie, co może również spowodować nieznaczne odsunięcie od dokładnego oknie 24 godzin.

    @locations = Location.where(updated_at: 24.hours.ago..Time.now) 
    
  4. Można również zrezygnować składnię hash w parametrach where, przekazując ciąg SQL, która filtruje z operatorem > porównania.

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

W kontrolerze, dodać akcję indeksu, z preferowanym podejściem zapytania:

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

Państwa zdaniem, należy dodać następujące wiersze:

<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

dlaczego 120.day ? Czy to pytanie zostało zmodyfikowane? –

+0

Nie, nie było. To był tylko kolejny przypadek. Zaktualizowałem odpowiedź, aby użyć "24 godziny" do uzgodnienia z Q. Dzięki za sprawdzenie! – sealocal

+0

Działa również: 'Location.where (updated_at: 1.day.ago..Time.now)' – Adobe

Powiązane problemy