【问题标题】:Rails sort particular value at the topRails 在顶部排序特定值
【发布时间】: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


【解决方案1】:

如果您使用的是MySql,您可以尝试按照field的顺序进行操作

.order("FIELD(status, 'Queued'), updated_at DESC")

对于 postgres

.order("status = 'Queued' DESC, updated_at DESC")

【讨论】:

【解决方案2】:

试试

BuildHistory.order("CASE WHEN status = 'Queued' THEN 1 ELSE 2 END", "updated_at DESC")

注意:我自己没有检查过代码,但我认为它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 2022-06-10
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    相关资源
    最近更新 更多