根据帖子的最新评论获取用户帖子

时间:2014-01-28 23:27:39

标签: ruby-on-rails ruby-on-rails-4 rails-postgresql

如果我有以下关系:

User
has_many :posts

Post
has_many :comments
belongs_to :user

Comment  
belongs_to :post

如何按每篇帖子的最新评论排序用户的帖子?我正在使用Rails和Postgres。理想情况下,我想使用连接来执行此操作。

3 个答案:

答案 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")  

我希望它会给你想要的结果。