Поскольку это просто лямбда-функция, вы можете использовать там if/else
, и она будет оценена во время вызова. Следовательно, вы можете написать область видимости так:
scope :for_list, lambda { |brand_ids|
if self.popular > 1
where('brands.id IN (?)', brand_ids).includes(:models).where("models.popular = '1'").order('models.name')
else
where('brands.id IN (?)', brand_ids).includes(:models).order('models.name')
end
}
Это должно работать. Тем не менее, я бы предостерег от использования этого. Эта логика не входит в сферу. Вместо этого вы должны спросить вас о ваших представлениях, и контроллеры настроены и переработать их.