我正在创建一个包含两个不同类的列表页面,我想按日期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
答案 0 :(得分:4)
一些事情。首先,您应该在上面的示例中使用sort_by
,因为该块使用了您使用的一个参数。 sort
块需要两个项目A和项目B,以进行比较。接下来,您可以通过从重要事项中减去日期来获得您想要的内容,例如今天的日期:
objects.sort_by {|x| [Date.today - x.date, x.name]}
即使日期可能在将来,数学仍然有效。
这些页面详细说明了sort
和sort_by
: