【问题标题】:How to order by self.created_at and children.created_at in find conditions?如何在查找条件下按 self.created_at 和 children.created_at 排序?
【发布时间】:2012-03-12 13:56:38
【问题描述】:

我正在使用 Rails 2.2.2 和 ruby​​ 1.8.6 进行开发。

如果没有评论,我想订购最新的comments.created_atself.created_at 有许多cmets 的Topic 型号。

#<Topic id: 1, :created_at: "2012-03-12-10:00:00">
#<Topic id: 2, :created_at: "2012-03-13-09:00:00">
   =>#<Comment topic_id: 2, :created_at: "2012-03-15-16:00:00">
#<Topic id: 3, :created_at: "2012-03-14-14:00:00">
   =>#<Comment topic_id: 3, :created_at: "2012-03-14-16:00:00">

# Order should be => Topic id 2,3,1

我已经编写了通过两个顺序条件的条件,但该顺序通过第一个条件。

Topic.find(:all, :order=>"topics.created_at desc, comments.created_at desc",    :include=>"comments")

# Order is => Topic id 3,2,1

我知道sort_by很容易订购,但我想在find方法中按order参数订购,因为我使用了paginating_find插件。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    如果您使用的是 MySQL,您可以像这样订购它们:

    :order => "IFNULL(comments.created_at, topics.created_at) DESC"
    

    其他 DBMS 应该有类似的功能。

    【讨论】:

    • 非常感谢。这就是我想要的!
    猜你喜欢
    • 2019-09-19
    • 1970-01-01
    • 2017-01-09
    • 2018-09-20
    • 2020-07-13
    • 2014-11-07
    • 1970-01-01
    • 2011-06-25
    • 2011-05-10
    相关资源
    最近更新 更多