我有一些基本上尝试在活动关系顺序方法中使用SQL case语句的代码:
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,having和join。
帮助! :)
答案 0 :(得分:6)
我也遇到过这个问题:
您可以将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")