2016-02-07 37 views
0

人們可以隨着時間範圍這樣搜索模式搜尋有時間範圍的替代模式

User.where("updated_at = :updated_at and status != :status", 
      updated_at: previous_update..now, status: "employee") 

而且事實證明,

User.where("updated_at = :updated_at", updated_at: previous_update..now) 

不起作用。看起來像應該以某種方式轉換爲sql格式,然後才能像這樣替換。或者,有更好的方式來表達上面的複雜查詢?

編輯

我用Jon's suggestion到鏈where過濾器:

now  = Time.now 
updates = User.where(updated_at: previous_update..now) 

employee_updates  = updates.where(status: "employee") 
non_employee_updates = updates.where('status != :status', status: "employee") 

回答

1

你可以ch艾因您where查詢:

User.where(status: 'employee').where(updated_at: previous_update..now) 

或者您可以在同一where子句中結合他們:

User.where(status: 'employee', updated_at: previous_update..now) 

有了您的佔位符的條件下,你需要用他們在大括號:

User.where('updated_at = :updated_at and status != :status', 
      {updated_at: previous_update, status: "employee"}) 

雖然無法檢查日期範圍內的平等,所以檢查updated_at等於將會失敗。您需要生成大於或等於開始日期並且小於或等於結束日期的各種條件。

基於此......我可能會堅持使用非佔位符格式來進行這樣的簡單查詢。

1

您可以使用:

User.where("updated_at >= :updated_at", updated_at: previous_update) 

,如果你需要到現在爲止...

+0

感謝您的回覆。在我目前的應用程序中,我想確切地知道「現在」。但是這種方法可能適用於另一種情況。 – Adobe