Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 获取一个用户';s根据最近的帖子评论排序的帖子_Ruby On Rails_Ruby On Rails 4_Rails Postgresql - Fatal编程技术网

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分组就足够了,因为您是按评论排序的。按降序创建的,您将得到每个匹配帖子的第一个结果。