【发布时间】:2017-01-09 09:24:01
【问题描述】:
build_histories(名称、状态、updated_at)
foo1, Queued, 2017-01-08 13:46:59
foo2, Failed, 2017-01-02 13:46:59
foo3, Success,2017-01-03 13:46:59
foo4, Queued, 2017-01-04 13:46:59
foo5, Failed, 2017-01-05 13:46:59
foo6, Success,2017-01-09 13:46:59
我试过了,它返回了
BuildHistory.joins(app_build: :app).where("build_histories.bundle like ?","%#{params}%").order("CASE WHEN status = 'Queued' THEN 1 ELSE 2 END, status", "updated_at DESC")
foo1, Queued, 2017-01-08 13:46:59
foo4, Queued, 2017-01-04 13:46:59
foo2, Failed, 2017-01-02 13:46:59
foo5, Failed, 2017-01-05 13:46:59
foo3, Success,2017-01-03 13:46:59
foo6, Success,2017-01-09 13:46:59
但我想将其排序为“已排队”总是在顶部,然后“失败/成功”应该按 updated_at desc 顺序排列
例子
foo1, Queued, 2017-01-08 13:46:59
foo4, Queued, 2017-01-04 13:46:59
foo6, Success,2017-01-09 13:46:59
foo5, Failed, 2017-01-05 13:46:59
foo3, Success,2017-01-03 13:46:59
foo2, Failed, 2017-01-02 13:46:59
供参考:我尝试基于this
尝试了以下
BuildHistory.joins(app_build: :app).where("build_histories.bundle like ?","%#{params}%").select("*, CASE WHEN build_histories.status = 'Queued' THEN 1 ELSE 2 END as tmp_order").order("tmp_order, build_histories.updated_at desc")
我能够得到结果,但在状态栏中我得到的是状态 = 1 或 2 而不是“排队/成功/失败”
请帮助
【问题讨论】:
-
@IceMan 谢谢,BuildHistory.joins(app_build: :app).where("build_histories.bundle like ?","%#{params}%").select("*, CASE WHEN build_histories .status = 'Queued' THEN 1 ELSE 2 END as tmp_order").order("tmp_order, build_histories.updated_at desc") 我能够得到结果,但在状态栏中我得到的是 status = 1 或 2 而不是“Queued /成功/失败”
-
我的回答只是为了帮助订购,顺便说一句,在我之后发布了一个更好的答案。但是,列本身不会改变,状态是您数据库中的整数吗?
-
status 不是整数,我尝试了其他解决方案。它有效。
标签: ruby-on-rails