2016-01-13 69 views
0

只有當廣告系列處於活動狀態時,我纔想在下拉菜單中顯示廣告系列。廣告系列模型具有valid_from和valid_until列(均爲日期)。現在,我只想在Date.today介於valid_from和valid_until之間時顯示Campaign。例如。 valid_from: "12-13-2015"valid_until: "12-17-2015"並且讓我們說Date.today is 12-14-2015Rails:比較3日期

的代碼(這是不正確的工作中):

<% Brand.all.each do |b| %> 
    <%= f.collection_select(:campaign, Campaign.where(brand: b.company).where('valid_from' && 'valid_until' < Date.today), :campaign, :campaign, {prompt:true}, {class: 'form-control'}) %> 
<% end %> 

預期的結果是,一個運動只顯示了,如果它是「活動」這兩個日期之間。

任何想法如何解決這個問題?

在此先感謝!

回答

2

試試這個:

(valid_from..valid_until).cover?(Date.today) 

,或者,如果你想保持在你的風格,這個:

.where('valid_from <= ? AND valid_until >= ?', Date.today, Date.today) 
+1

我用這種方法解決了問題: 'Campaign.where(brand:b.company).where('valid_from <=?',Date.today).where('valid_until> =?',Date。今天)'。 – CottonEyeJoe

2

你的問題是,這個語法和邏輯都是錯誤的:

.where('valid_from' && 'valid_until' < Date.today) 

有兩個獨立的測試,在這裏做。

將其更改爲

.where('valid_from <= ? and valid_until >= ?', Date.today, Date.today) 

你不妨用你的品牌的測試過於結合起來:

<%= f.collection_select(:campaign, Campaign.where('brand = ? and valid_from <= ? and valid_until >= ?', b.brand, Date.today, Date.today), :campaign, :campaign, {prompt:true}, {class: 'form-control'}) %>