如何通过创建帖子的最后一个人订购主题?

时间:2016-04-15 03:32:00

标签: ruby-on-rails ruby

我有一个主题列表,我想按照上一篇文章的顺序显示所有主题。我认为当您点击最新的按钮时,话语会使用类似的内容。

我试过这个

@topics = Topic.includes(:posts).order("posts.created_at desc")

但我的主题却以奇怪的顺序发生。

2 个答案:

答案 0 :(得分:2)

我会使用scopes只是因为它很好地将搜索功能封装到它所属的类中,因此您可以在其他地方重用它。

class Post < ActiveRecord::Base
  scope :descending, ->() { order(arel_table[:created_at].desc) }
end

class Topic < ActiveRecord::Base
  # reuse the descending scope from the Post class to define an
  # order on the Topic class
  scope :descending, ->() {
    joins(:posts).merge( Post.descending )
  }

end

然后你可以这样做:

@topics = Topic.descending

如果您还想在查询中添加帖子,您仍然可以这样做:

@topics = Topic.descending.includes(:posts)

答案 1 :(得分:0)

您必须使用'join'而不是'includes'

@topics = Topic.joins(:posts).order("posts.created_at desc")

您可以在此处查看解释:https://stackoverflow.com/a/6577085/1932629