Ruby on rails 获取一个用户';s根据最近的帖子评论排序的帖子
如果我有以下关系:Ruby on rails 获取一个用户';s根据最近的帖子评论排序的帖子,ruby-on-rails,ruby-on-rails-4,rails-postgresql,Ruby On Rails,Ruby On Rails 4,Rails Postgresql,如果我有以下关系: User has_many :posts Post has_many :comments belongs_to :user Comment belongs_to :post 我如何获得一个用户的帖子,按每个帖子的最新评论排序?我在Postgres中使用Rails。理想情况下,我希望使用联接来实现这一点。您可能会发现,从长远来看,在创建注释时更新Post对象的更容易、更有效。如果您不喜欢这样的想法,可以在属性中添加一个注释,并将其更新 这很容易通过在子对象的关联上使用
User
has_many :posts
Post
has_many :comments
belongs_to :user
Comment
belongs_to :post
我如何获得一个用户的帖子,按每个帖子的最新评论排序?我在Postgres中使用Rails。理想情况下,我希望使用联接来实现这一点。您可能会发现,从长远来看,在创建注释时更新
Post
对象的更容易、更有效。如果您不喜欢这样的想法,可以在
属性中添加一个注释,并将其更新
这很容易通过在子对象的关联上使用: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)
我在我的应用程序中有这个,可以通过我主页上列出的最新帖子来订购。也许这会帮助你设定最近评论的顺序
@posts=Post.select([:id,:title]).order(“在描述时创建”).limit(6)
你可能想做下面这样的事情,但不确定它是否适合你
@posts=post.comments.select([:id,:title]).order(“created_at desc”).limit(6)您可以使用以下代码作为参考:
User.includes(:comments).where("posts.user_id =? ", post_owner_user_id).order("comments.created_at desc")
我希望它能给你期望的结果 我喜欢你在方法中添加的评论。使用更新的_将不起作用,因为编辑的帖子将显示为最近的评论。谢谢你的回复。值得注意的是,:touch
方法也会在编辑/删除评论后更新帖子。如果这是不可取的,您可以使用创建后回调来更新父级。我的方案是人为设计的,这不是我的问题,但值得向其他人指出。我仍然对如何使用联接进行此操作感兴趣。暂时不接受答复。您没有对加入进行分组。抱歉-更新了我的答复。按帖子ID分组就足够了,因为您是按评论排序的。按降序创建的,您将得到每个匹配帖子的第一个结果。