Ruby / Rails sort_by date desc,名称为asc

Wal*_*ong 3 ruby ruby-on-rails-4

我正在创建两个不同类的列表页面,我想按日期desc(名称asc)对它们进行排序。两者都有在每个模型中带有date方法的datetime字段。

posts = Post.all
news = News.all
@news_and_posts = posts.zip(news).compact.select(&:date).sort {|x| [-x.date, x.name]}
Run Code Online (Sandbox Code Playgroud)

这会引发NoMethodError:2014年11月11日星期二的未定义方法`-@':日期

在其他几个问题上,在sort_by和sort中都给出了此答案,但是我没有运气。

Rails 4.0.5 Ruby 2.1.3

Jai*_*yer 5

几件事。首先,您应该sort_by在上面的示例中使用,因为该块使用了一个参数。该sort块需要两个-项目A和项目B,以进行比较。接下来,您可以通过从重要日期(例如今天的日期)中减去日期来获得所需的内容:

objects.sort_by {|x| [Date.today - x.date, x.name]}
Run Code Online (Sandbox Code Playgroud)

即使日期可能是将来的日期,数学仍然有效。

这些页面详细介绍了sort和之间的区别sort_by

http://rubycuts.com/enum-sort

http://rubycuts.com/enum-sort-by

顺便说一句,我同意其他评论者的意见,您确实应该在数据库查询本身中对这些记录进行排序,但是我想解决您所询问的特定问题。