按布料大小对活动记录对象进行排序

时间:2018-09-13 13:20:16

标签: ruby-on-rails ruby ruby-on-rails-4

我试图按布料大小对活动记录对象进行排序,但似乎无法为其生成逻辑。

大小的服装罐:“ 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"]

2 个答案:

答案 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"
)

参考sql ORDER BY multiple values in specific order?