Ruby / Rails sort_by date desc,name asc

时间:2014-11-11 19:54:12

标签: ruby ruby-on-rails-4

我正在创建一个包含两个不同类的列表页面,我想按日期desc,名称asc对它们进行排序。两者都有日期时间字段,每个模型都有一个日期方法。

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

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

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

Rails 4.0.5 Ruby 2.1.3

1 个答案:

答案 0 :(得分:4)

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

objects.sort_by {|x| [Date.today - x.date, x.name]}

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

这些页面详细说明了sortsort_by

之间的区别

http://rubycuts.com/enum-sort

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

是的,我同意其他评论者的意见,你们真的应该在数据库查询中订购这些记录,但我想解决你提出的具体问题。