如何通过创建帖子的最后一个人来订购主题?
问题描述:
我有一个主题列表,我想按最后发布的顺序显示所有主题。我认为当你最近点击按钮时,话语会使用类似的东西。如何通过创建帖子的最后一个人来订购主题?
我试着这样做
@topics = Topic.includes(:posts).order("posts.created_at desc")
,但我的主题以一种奇怪的顺序得到。
答
我会用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)
答
您必须使用“连接”,而不是“包括”
@topics = Topic.joins(:posts).order("posts.created_at desc")
您可以检查这里的解释:https://stackoverflow.com/a/6577085/1932629