2014-03-28 219 views
3

我在查找其開始和結束日期範圍超過特定日期的記錄。日期是隨機的,並且:start_date和end_date是價格實體的屬性。在日期範圍內查找記錄

date = Time.now 
record_i_want = Price.where(date => :start_date .. :end_date) 

謝謝。

回答

8

你可以簡單地做

Price.where(:date => start_date..end_date) 

這將導致以下SQL(開始和結束日期 - '2014年3月27日', '2014年3月28日')

SELECT `prices`.* FROM `prices` WHERE (`prices`.`date` BETWEEN '2014-03-27' AND '2014-03-28') 

編輯: 認識到這是您正在查找的查詢。謝謝你,Coenwulf指出它

Price.where(['start_date < ? AND end_date > ?', date, date]) 
+0

+1以適當的紅寶石方式使用日期範圍。 –

+0

這是一個很棒的提示。不知道。真棒。 – eduardosasso

+0

這看起來與OP請求的內容相反。如果日期是表格中的字段,那將是完美的,但它會根據帖子中的文字顯示錶格中有start_date和end_date字段。所以這段代碼並沒有解決發佈的問題。 – Coenwulf

0

這應該工作:

def get_record_by_date(date) 
    Price.where([start_date.to_i < date.to_i] && [end_date.to_i > date.to_i]) 
end 
1

你要選擇行您的日期比END_DATE大於起始日期少。你可以在你的調用中指定適當的SQL where子句,如下所示:

Price.where([":date >= start_date AND :date <= end_date", {date: Date.today}) 

這會給你所有匹配的價格。如果你知道你會得到一個,你可以通過先打電話來得到它。

Price.where([":date >= start_date AND :date <= end_date", {date: Date.today}).first 

進行任何適當調整> =和< =如果你要排除的起始日期和/或從結果END_DATE。舉例來說,如果價格有效啓動的起始日期,但不通過END_DATE有效,你可以改變子句:

":date >= start_date AND :date < end_date" 
相關問題