2012-12-12 84 views
2

查找記錄有日期時間3天,我有以下範圍:的Rails 3:從今天

def coming_up_on_renewal(product_name = "product_name") 
    where('billing_start_date = NOW() + INTERVAL 3 day AND status = ? AND product_name = ? AND auth_net_subscription_id IS NOT NULL', :active, "#{product_name}") 
end 

而且我已經在我的數據庫操作的一條記錄將在未來3天,但是當我運行這個範圍,返回一個空數組。

我基本上試圖檢索billing_start_date是從當天起3天的記錄。

回答

4

試試這個。

def coming_up_on_renewal(product_name) 
    where(:status => :active, :product_name => product_name) 
    .where(:billing_start_date => 
    (3.days.from_now.beginning_of_day)..(3.days.from_now.end_of_day)) 
    .where('auth_net_subscription_id IS NOT NULL') 
end 

對於您的額外「IS NOT NULL」條件,請參閱this answer

+0

運行您的activerecord語句時出現錯誤:'syntax error,unexpected',',expect tASSOC ... name,'billing_start_date =?',3.days.from_now)' – dennismonsewicz

+0

感謝您的幫助!我能夠得到它:'where(:status =>:active,:product_name => product_name,:billing_start_date =>(Time.now.midnight + 3.day)..(Time.now.end_of_day + ('auth_net_subscription_id IS NOT NULL')' – dennismonsewicz

+1

我已經編輯了我的答案,但我不滿意'billing_start_date'部分。使用'3.days.from_now',它正在查找具有完全時間戳的記錄,直到第二個。你可能會看更多的日期範圍。 –