Я пытаюсь очистить код ActiveRecord, написанный с помощью MySQL операторов case, используя ARel. Я знаю, что Arel может обрабатывать операторы case, но не уверен, как его использовать.
Так что у меня есть таблица заказов с количеством и столбцами user_id (внешний ключ). Я динамически вычисляю цену заказов, поскольку существуют разные схемы ценообразования в зависимости от заказанного количества. Вот как выглядит код AR:
def orders_with_price
<<-SQL
orders.*,
SUM(CASE orders.quantity
WHEN 2 THEN 500 * orders.quantity
WHEN 5 THEN 450 * orders.quantity
WHEN 10 THEN 350 * orders.quantity
END) AS total_price
SQL
end
Order.
select(orders_with_price).
group("orders.user_id").
having("total_price > ?", minimum_price).
order("total_price")