2015-07-02 6 views
0

У меня есть продукт, который должен отображаться между диапазоном дат. Итак, у меня естьRails 4 scope с условием

is_active :boolean 
featured :boolean 
featured_start_date :date 
featured_end_date :date 

Теперь мне нужно написать область, которая должна вернуть мне все предлагаемые продукты для сегодняшней даты. Я не уверен, как я могу передать условную дату при написании области, пожалуйста, помогите. То, что у меня есть сейчас:

scope :featured, -> { where(is_active: true, featured: true,) } 

ответ

1

Необходимо проверить, содержится ли текущая дата в диапазоне заданных дат. ActiveRecord не имеет прямого решения. У вас есть несколько вариантов, хотя:

Использование фрагментов SQL

scope :featured, -> { 
    where(is_active: true, featured: true) 
    .where('featured_start_date <= ?', Date.today) 
    .where('featured_end_date >= ?', Date.today) 
} 

Использование AREL

scope :featured, -> { 
    where(is_active: true, featured: true) 
    .where(Product.arel_table[:featured_start_date].lteq Date.today) 
    .where(Product.arel_table[:featured_end_date].gteq Date.today) 
} 

Есть больше возможностей, но они должны работать нормально.

Смежные вопросы