所以我有@cake.type,它可以是“Primo”,“Multilayered”,“Decorative”,“On销售”,“Basic”。
我想把蛋糕按这个顺序排列。所以所有的“Primo”蛋糕在顶部,其次是所有的“多层”蛋糕下一个等。每种类型的蛋糕应进一步列出“创建_at”(最早创建的蛋糕第一)。
@cakes = []
@cakes << @store.cakes.where(type: "Primo").order(created_at: :desc)
@cakes << @store.cakes.where(type: "Multilayered").order(created_at: :desc)
@cakes << @store.cakes.where(type: "Decorative").order(created_at: :desc)
@cakes << @store.cakes.where(type: "On Sale").order(created_at: :desc)
@cakes << @store.cakes.where(type: "Basic", "Basic").order(created_at: :desc)
有没有一种方法可以用一个查询来完成?
. maybe:
cake_eater_nom = []
c = @store.cakes
primo_cakes = c.where(type: "Primo").order(created_at: :desc)
cake_eater_nom << primo_cakes
multilayered_cakes = c.where(type: "Multilayered").order(created_at: :desc)
cake_eater_nom << multilayered_cakes
decorative_cakes = c.where(type: "Decorative").order(created_at: :desc)
cake_eater_nom << decorative_cakes
on_sale_cakes = c.where(type: "On Sale").order(created_at: :desc)
cake_eater_nom << on_sale_cakes
basic_cakes = c.where(type: "Basic").order(created_at: :desc)
cake_eater_nom << basic_cakes
3条答案
按热度按时间jjjwad0x1#
如果你已经在使用Ruby on Rails 7.0,那么你可以像这样使用
in_order_of
:5jdjgkvh2#
您可以添加一个额外的字段来存储所需的顺序,或者使用
CASE WHEN
+created_at
编写自定义条件。piwo6bdm3#
你可以用整数Map类型,并按它们排序,如下所示:
您还可以在模型中以这种方式定义一些范围并应用它
另一种选择是在数据库中保留类型为整数并使用枚举
注:
type
是用于STI(单表继承)的保留字