带有轨道的复杂订单语句AREL:SQL Case语句

时间:2011-10-18 16:52:52

标签: ruby-on-rails arel

我有一些基本上尝试在活动关系顺序方法中使用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。

帮助! :)

1 个答案:

答案 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")