2012-05-28 6 views
7

Checkin modeline sahip bir raylı uygulamasına sahibim. Geçerli gün için belirli bir zaman aralığındaki tüm kayıtları bulmak istiyorum. 12PM ile 16:30 arasında oluşturulan tüm kayıtları almak için where'u nasıl yazarım?İki kez arasındaki rails sorgusu

+0

Hangi veritabanını kullanıyorsunuz? günün saatini alabilmek için fonksiyonlar farklılık gösterecektir. Saat/dakika gününe ek olarak depolayacağınız zaman en kolay olacak. –

+0

Postgresql kullanıyorum. Rails'in sağladığı standart 'created_at' zaman damgası sütunu kullanıyorum –

cevap

36

@ x1a4'ün cevabı sizin için iyi olmalı ama bir aralık kullanarak daha okunabilir ve daha kısa bir şekilde yapabilirsiniz. Bir süre oluşturmak için başka bir şekilde birlikte Time.parse("12pm") değiştirebilir

SELECT "checkins".* 
FROM "checkins" 
WHERE ("checkins"."created_at" BETWEEN '2012-05-28 12:00:00.000000' AND '2012-05-28 16:30:00.000000') 

:

Chekin.where(created_at: Time.parse("12pm")..Time.parse("4:30pm")) 

gibi bir şey oluştursun. Sen tarihleri ​​arasında kayıtlarını bulmak için mücevher altındaki kullanabilirsiniz

8

Bu UTC zaman dilimini varsayarak çalışmak gibidir:

Record.where('created_at > ? AND created_at < ?', Date.today + 12.hours, Date.today + 16.5.hours) 

veya BETWEEN bir ile:

Record.where('created_at BETWEEN ? AND ?', Date.today + 12.hours, Date.today + 16.5.hours) 

BETWEEN veya aralığında ikinci bir değeri içerebilir olmayabilir. Postgres includes it.

0

,

kullanımı oldukça kolay ve [yıldızı ile] daha net Bu gem [1]. Bu gem kullanıyorum ve API daha açık ve belgelere de açıkladı. İşte

Post.between_times(
Time.zone.now - 3.hours, # all posts in last 3 hours 
Time.zone.now 
) 

ayrıca Post.by_month("January", field: :updated_at)

belgelere bakın ve onu deneyin bizim alanını geçebileceği.