2014-04-04 13 views

cevap

23

Eğer Rails kullandığınız için, sana bir yerler kaynağın karşılık gelen bu dosyaları olduğunu varsayalım olacak:

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

son 24 saat içinde kayıtları sorgulamak için birkaç ActiveRecord alternatifleri vardır:

  1. Bu örnek, zaman damgası sütunlarını sorgulamak için bir aralık belirleyebileceğiniz kavramını göstermektedir.

    @locations = Location.where(updated_at: (Time.now - 24.hours)..Time.now) 
    
  2. Yukarıda sorgu ile ikinci bir hassas hatanın bir kısmı olabilir, aşağıdaki yorum işaret etti. Sorgunun tam olarak 24 saat olmasını sağlamak için now = Time.now değişkenini saklayabilirsiniz.

    now = Time.now 
    @locations = Location.where(updated_at: (now - 24.hours)..now) 
    
  3. Sen çıkarma işlemini ortadan kaldırmak ve aynı zamanda 24 saat tam bir pencereden ofset hafif sonuçlanabilir ki, Raylar sizin için halletsin başladı.

    @locations = Location.where(updated_at: 24.hours.ago..Time.now) 
    
  4. Ayrıca > karşılaştırma operatörü ile filtreleyen bir SQL dizesi geçirerek, where parametrelerinde karma sözdizimi vazgeçmek.

    @locations = Location.where('updated_at > ?', 24.hours.ago) 
    
  5. Kumandanızda olarak

, tercih sorgu yaklaşımla, bir dizin eylemi ekleyin:

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

senin görünümünde, şu satırları ekleyin:

<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

neden 120.day ? Soru değiştirildi mi? –

+0

Hayır öyle değildi. Bu sadece başka bir rastlantısal örnekti. Ben Q ile anlaşma için '24.hours' kullanmak için cevabı güncellendi Kontrol için teşekkürler! – sealocal

+0

Ayrıca çalışır: 'Location.where (updated_at: 1.day.ago..Time.now)' – Adobe

İlgili konular