2014-11-06 34 views
0

我想为模型早餐,公寓和别墅制作一个页面(宣传)。这个想法是在一个范围内将这些模型合并到一个作用域中,其中属性promotetrue并按属性sorting排序可能吗?适用于多种车型

Thanks..remco

回答

1

除非这些模型UNION兼容的,你不能在一个语句进行查询,但需要三种不同的查询。

假设这些模型是不同的,你可以做的是

(Villa.where(promote: true).to_a + 
Apartment.where(promote: true).to_a +  
Breakfast.where(promote: true).to_a).sort_by(&:sorting) 

从这句话开始,有很多方法可以更优雅地写,包括范围,自定义函数等

def promotions(*models) 
    models.inject([]) do |records, model| 
    records += model.where(promote: true).to_a 
    end.sort_by(&:sorting) 
end 

promotions(Villa, Apartment, Breakfast) 
# => [..., ..., ...] 
+0

谢谢..我会尝试它! – Remco 2014-11-11 15:18:49

相关问题