2016-01-13 2 views
0

Я хочу отобразить Кампанию в раскрывающемся списке, только если кампания активна. Модель кампании имеет столбец valid_from и valid_until (обе даты). Теперь я хочу показать кампанию, только если Date.today находится между valid_from и valid_until. Например. valid_from: "12-13-2015"valid_until: "12-17-2015" и, допустим, Date.today is 12-14-2015.Rails: Compare 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'}) %> 
Смежные вопросы