按布料尺寸对活动记录对象进行排序

Sort active record object by cloth size

我正在尝试按布料尺寸对活动记录对象进行排序,但似乎无法为其生成逻辑。

衣服罐尺寸:"S"、"M"、"L"、"XL"、“2XL”、“3XL”、“4XL”、“5XL”、 “6XL”

我通过以下方式获取对象:

@by_price_levels = PriceLevel.select(:id, :level, :size, :price)

将在 size 上进行排序。如何按布料尺寸排序?

我已经为初学者创建了一个尺寸数组:

sort_order = ["S", "M", "L", "XL", "2XL", "3XL", "4XL", "5XL", "6XL"]

给你:

@by_price_levels = PriceLevel.select(:id, :level, :size, :price).order(
  "CASE size
    WHEN 'S' THEN 1
    WHEN 'M' THEN 2
    WHEN 'L' THEN 3
    WHEN 'XL' THEN 4
    WHEN '2XL' THEN 5
    WHEN '3XL' THEN 6
    WHEN '4XL' THEN 7
    WHEN '5XL' THEN 8
    WHEN '6XL' THEN 9
    ELSE 10
   END, id"
)

参考 sql ORDER BY multiple values in specific order?

您可以使用活动记录enums:

这样,您仍然可以按 string/symbol 分配字段,但基础数据实际上是一个整数,因此您可以只使用 order(:size) 按大小排序。请注意,在声明枚举时,您应该按顺序列出大小,并在除末尾以外的任何地方添加大小可能会导致需要处理的数据不一致。