2016-07-28 70 views
0

中在我的模型我定義的範圍如下:軌道轉換日期時間,以日期範圍

scope :today, -> { where time_start: Date.today } 

這不是工作,因爲我比較反對的日期一個MySQL日期時間。 我正在嘗試做相當於date()mysql函數(從日期時間提取日期)。

回答

0

試試這個:

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' 
    ) 
+0

感謝尼克,我想到了這個解決方案,但感覺就像一個黑客 – mrtnmgs

+0

這是沒有辦法破解。實際上,很多人會認爲這是一種Rails的做法,而不是在查詢中使用原始的和潛在的供應商特定的字符串。 –

+0

哦,偉大的一點!我會改變接受的答案。再次感謝! – mrtnmgs

2

正如尼克Nilov建議,那就是這樣做的一種方式。
其他方式,你可以這樣做:

scope :today, -> { where("date(time_start) = ?", Date.today) } 

合力查詢是:

選擇users * FROM users WHERE(日期(TIME_START)= '2016年7月29日')

0

我有一個名爲by_star的寶石,它可以讓你做到這一點,而無需在模型中編寫任何代碼。

此代碼:

User.today 

將獲取當前日期中創建的所有用戶。如果你想使用time_start代替,這樣做:

User.today(field: :time_start)