Сортировать активный объект записи по размеру ткани - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь отсортировать объект активной записи по размеру ткани, но не могу сгенерировать для него логику.

Бидон для одежды размеров: "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 голосов
/ 13 сентября 2018

Вы можете использовать активную запись перечисления :

Таким образом, вы все равно можете назначить поле строкой / символом, но базовые данные на самом деле будут целыми числами, поэтому вы можете просто использовать order(:size) для сортировки по размеру. Помните, что при объявлении перечисления вы должны перечислять размеры по порядку, а добавление размера в любом месте, но в конце может привести к несоответствиям данных, которые необходимо будет обработать.

0 голосов
/ 13 сентября 2018

Вот, пожалуйста:

@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"
)

Ref sql ЗАКАЗАТЬ несколько значений в определенном порядке?

...