Rails 按 SQL 排序

Tom*_*ond 2 sql ruby-on-rails

我有一个 TraitQuestion 模型,它有许多特征或答案 - 每个特征或答案都有一个值,例如 1、2、3 或 -3105(对于上述任何一个)。我无法更改这些值,因为外部 API 需要它们。

我想按值对它们进行排序,但是当我这样做时,-3105 的答案显示在顶部,即使它说“以上都不是”:

Answer 4 = -3105
Answer 1 = 1
Answer 2 = 2
Answer 3 = 3
Run Code Online (Sandbox Code Playgroud)

关于我们如何订购它的任何想法,以便它

1
2
3
-3105?
Run Code Online (Sandbox Code Playgroud)

我对 SQL 很陌生,但似乎我应该能够做这样的事情:

@trait_question.traits.order('CASE WHEN value AS int > 0 then 1 ELSE 0 END')
Run Code Online (Sandbox Code Playgroud)

但这不起作用。有什么想法可以调整顺序调用 SQL 以便按正确的顺序对它们进行排序吗?

编辑:这是通过 Amazon AWS 的 Postgresql 9.4.1

Dee*_*eep 6

我不知道这是否适合你,但试试这个:

@trait_question.traits.order('ABS(value)')
Run Code Online (Sandbox Code Playgroud)

ABS将负值更改为每次正因此取绝对值。如果您的数据库字段是,string那么您可以按照为他工作的 Tom 的建议进行操作:

@trait_question.traits.order('ABS(CAST(value AS int))')
Run Code Online (Sandbox Code Playgroud)