在Ruby on Rails中对元素进行排序

时间:2015-03-29 09:48:58

标签: ruby-on-rails ruby

我有模型主题和帖子。

routes.rb

resources :topics do
  resources :posts
end

我想在本主题的最后一篇文章中按created_at排序主题。

@topics = Topic.order(???)

更新:

Topic.includes(:posts).order("posts.created_at desc")

这段代码很棒,但如何订购没有帖子的新主题?没有帖子的新主题必须排在首位。

2 个答案:

答案 0 :(得分:1)

假设主题和帖子之间存在“has_many”关系,那样的话应该有效:

Topic.includes(:posts).order("posts.created_at desc")

请注意,嵌套路线(如您所示)并不意味着模型之间的关系。

答案 1 :(得分:0)

这是我喜欢使用的方式

Topic.includes(:posts).merge(Post.order(created_at: :desc))

如果你有更好的范围

class Post < ActiveRecord::Base
  scope :ordered_by_creation, -> { order(created_at: :desc) }
end

查询将变为

Topic.includes(:posts).merge(Post.ordered_by_creation)