2015-05-26 102 views
1

我試圖檢查賦值的due_date(日期時間數據類型)是否等於Date.today。我需要幫助的邏輯是'due_date:Date.today'部分。提前致謝。檢查日期時間字段是否等於Date.today

@student_assignments = StudentAssignment.joins(:assignment).where(assignments: { due_date: Date.today }) 

回答

1
.where("DATE(assignments.due_date) = ?", Date.today) 
+0

這將不適用於每個DBMS – jazzytomato

+0

@ThomasHaratyk這是正確的,我只是查找mysql變體,但這應該在postgres中工作。 – zwippie

+0

後續問題:下週如何獲得due_dates? – maclover7

0

這裏是一個可能的解決方案:

{ due_date: (Date.today.beginning_of_day..Date.today.end_of_day) } 
+0

仍然不會有日期時間列 – max

+0

工作今天,該聲明將產生以下SQL,它與日期時間列'BETWEEN'2015-05-26 00:00:00'AND'2015-05-26 23:59:59'' – jazzytomato

+0

一起工作啊,我是那麼錯了。抱歉。 – max

0

不同,需要有一個DateTime對象日期時間列比較。但是,如果您將權益與DateTime.now.beginning_of_day進行比較,那麼它只會與00:00的分配相匹配。

相反,如果你想assigments今天到期,你可以這樣做:

StudentAssignment.joins(:assignment) 
     .where(assignments: { 
      due_date: DateTime.now.beginning_of_day..DateTime.now.end_of_day 
     }) 

您可以創建一個名爲範圍:

class Assignment < ActiveRecord::Base 
    scope(:due_today) -> { 
    where(due_date:DateTime.now.beginning_of_day..DateTime.now.end_of_day) 
    } 
end 
相關問題