Есть много способов решить эту проблему, но в основе любого решения вам нужно определить порядок вручную (или использовать стороннюю библиотеку, которая уже написала этот ручной порядок для вас?).
Например, вы можете где-нибудь определить, например,
SIZE_NAMES = %w[XS S M L XL XXL]
, а затем в другом месте кода использовать что-то вроде:
variants.sort_by { |variant| SIZE_NAMES.index(variant.size) }
Для более «продвинутого» решениявместо этого вы можете рассмотреть возможность определения каждого размера как пользовательский объект , а не как обычный String
.Взгляните на модуль Comparable
и оператор <=>
("космический корабль").
Используя это, вы можете реализовать его таким образом, что, например, variants.sort
автоматически сравнивает варианты по их «преобразованному» размеру и упорядочивает их так, как вы ожидаете.