我有一个主题列表,我想按照上一篇文章的顺序显示所有主题。我认为当您点击最新的按钮时,话语会使用类似的内容。
我试过这个
@topics = Topic.includes(:posts).order("posts.created_at desc")
但我的主题却以奇怪的顺序发生。
答案 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