So I've got @cake.type, which can be either "Primo", "Multilayered", "Decorative", "On Sale", "Basic"`
I want to organize the list the Cakes in that order. So all the "Primo" cakes at the top, followed by all the "Multilayered" cakes next etc. Each type of cake should be further listed by "created_at" (oldest created cake first).
@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)
there a way to do it with one query?
... 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
When you are already on Ruby on Rails 7.0, then you can use in_order_of
like this:
types = ['Primo', 'Multilayered', 'Decorative', 'On Sale', 'Basic']
@cakes = @store.cakes
.where(type: types)
.in_order_of(:type, types) # sort by type (from list) frist
.order(:created_at) # then by created_at (oldest first)