中在我的模型我定義的範圍如下:軌道轉換日期時間,以日期範圍
scope :today, -> { where time_start: Date.today }
這不是工作,因爲我比較反對的日期一個MySQL日期時間。 我正在嘗試做相當於date()mysql函數(從日期時間提取日期)。
中在我的模型我定義的範圍如下:軌道轉換日期時間,以日期範圍
scope :today, -> { where time_start: Date.today }
這不是工作,因爲我比較反對的日期一個MySQL日期時間。 我正在嘗試做相當於date()mysql函數(從日期時間提取日期)。
試試這個:
scope :today, -> { where time_start: Date.today.beginning_of_day..Date.today.end_of_day }
在標準範圍內使用會生成一個BETWEEN
查詢,像這樣:
SELECT "models".* FROM "models"
WHERE (
"models"."time_start" BETWEEN
'2016-07-29 00:00:00.000000' AND '2016-07-29 23:59:59.999999'
)
正如尼克Nilov建議,那就是這樣做的一種方式。
其他方式,你可以這樣做:
scope :today, -> { where("date(time_start) = ?", Date.today) }
合力查詢是:
選擇
。users
* FROMusers
WHERE(日期(TIME_START)= '2016年7月29日')
我有一個名爲by_star
的寶石,它可以讓你做到這一點,而無需在模型中編寫任何代碼。
此代碼:
User.today
將獲取當前日期中創建的所有用戶。如果你想使用time_start
代替,這樣做:
User.today(field: :time_start)
感謝尼克,我想到了這個解決方案,但感覺就像一個黑客 – mrtnmgs
這是沒有辦法破解。實際上,很多人會認爲這是一種Rails的做法,而不是在查詢中使用原始的和潛在的供應商特定的字符串。 –
哦,偉大的一點!我會改變接受的答案。再次感謝! – mrtnmgs