我试图按布料大小对活动记录对象进行排序,但似乎无法为其生成逻辑。
大小的服装罐:“ 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"]
答案 0 :(得分:3)
您可以使用活动记录enums:
这样,您仍然可以通过字符串/符号来分配字段,但是底层数据实际上是整数,因此您可以使用order(:size)
来按大小排序。请注意,在声明枚举时,应按顺序列出大小,并在末尾添加任何大小,否则可能会导致数据不一致。
答案 1 :(得分:2)
您在这里:
@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"
)