如果我有以下关系:
User
has_many :posts
Post
has_many :comments
belongs_to :user
Comment
belongs_to :post
如何按每篇帖子的最新评论排序用户的帖子?我正在使用Rails和Postgres。理想情况下,我想使用连接来执行此操作。
答案 0 :(得分:1)
从长远来看,您可能会发现在创建评论时更新Post
对象的updated_at
会更容易,更有效。如果你不喜欢这个想法,可以添加一个comment_added_at
属性,然后更新。
使用子对象中的:touch
选项很容易实现:
Comment
belongs_to :post, :touch => true # This will update the Post.updated_at attribute
belongs_to :post, :touch => :comment_added_at # This updates the specified attribute instead
然后您只需按:updated_at
或:comment_added_at
排序并保存递归数据库查询。
如果你真的想用连接来做,请试试这个:
User.find(1).posts.joins(:comments).order('comments.created_at desc').group(:id)
答案 1 :(得分:0)
我的应用程序中有这个,可以通过我主页上列出的最新帖子进行排序。也许它可以帮助您设置帖子上最新评论的顺序。
@posts = Post.select([:id,:title])。order(“created_at desc”)。limit(6)
您可能希望执行以下操作,但不确定它是否适用于您。
@posts = post.comments.select([:id,:title])。order(“created_at desc”)。limit(6)
答案 2 :(得分:0)
您可以使用以下代码作为参考:
User.includes(:comments).where("posts.user_id =? ", post_owner_user_id).order("comments.created_at desc")
我希望它会给你想要的结果。