2016-01-13 68 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'}) %>