2015-01-12 41 views
0

坎寧安定律:這必須是完成此任務的最佳方式。最好的。在RAILS中進行「獨家或開放式」日期查詢的最佳方法

# rubies on railz 
# Assume we pass an options hash with, possibly, two dates. 
# If both dates: do an inclusive between the two 
# If start date: do open-ended search 
# Else do close-ended search 

def my_date_helper(options) 
    start_date = options[:start_date].try(:beginning_of_day) 
    end_date = (options[:end_date] || 6.months.from_now).end_of_day 

    if start_date && end_date 
    query.where(created_at: start_date..end_date) 
    elsif start_date 
    query.where("created_at >= ?", start_date) 
    else 
    query.where("created_at <= ?", end_date) 
    end 
end 
+0

這有問題嗎?在事物的宏偉計劃,它似乎可讀性和完成任務... ... –

+0

尼克威伊斯:謝謝你的驗證。我們無法想出更優雅的解決方案。有幾種寫作方式,但我們沒有發現改變的強制性理由。我希望我們錯過了一些新的rails helper或stdlib方法。乾杯。 – pricees

回答

1

你好每比如我最好的方法:

是爲陣營在SQL表使用

DATE(created_at) BETWEEN ? and ?,start_date,end_date 

爲什麼TYPE => DATETIME IM?

日期時間,如果你每例如2014年2月10日比較需要投created_at爲DATE類型,你需要在SQL 2014年2月10日無2014年2月10日14時零零分22秒

,如果你需要比較類型日期時間

query.where(created_at: start_date..end_date) 

問候!

+0

這並沒有完成這個開放式的封閉式問題。我們擁有使用已經完成的獨家「之間」。但是,如果忽略任一日期,我們希望該方法適當地處理範圍。 – pricees

+0

以sql查詢日期範圍的最佳方式 – pedroooo

相關問題