Сложный оператор заказа с рельсами AREL: оператор SQL Case - PullRequest
4 голосов
/ 18 октября 2011

У меня есть этот фрагмент кода, который в основном пытается использовать оператор SQL в методе порядка активных отношений:

relation = Foo.order("CASE WHEN foos.thing IS NOT NULL THEN 0 ELSE 1 END ASC")

и в сгенерированном (и исполняемом) SQL он выглядит так:

(ORDER BY CASE ASC)

Я попытался найти источник и потерять поток в вызове visitor.access. Это известная проблема? Это ошибка пользователя? Есть ли какая-то волшебная вещь, которую я должен сделать, чтобы это произошло? У меня сложилось впечатление, что он просто вставил сырой SQL. Есть другие вещи, которые мы делаем с отношением, такие как select, limit, offset, group, has и join.

помощь! :)

1 Ответ

6 голосов
/ 16 ноября 2011

У меня тоже была эта проблема:

Вы можете поместить CASE в SELECT и назвать его, чтобы использовать его в ORDER BY.

relation = Foo.select("*, CASE WHEN foos.thing IS NOT 
  NULL THEN 0 ELSE 1 END AS foo_order").order("foo_order ASC")
...