Ruby on rails “我怎么能?”;“颠簸”;有最新评论的帖子和没有评论的新帖子出现在Rails的顶部?
例如:我想要一篇刚刚提交的文章出现在页面顶部。如果有人在一篇老帖子上发表评论,我现在想把它放在最上面 这是我的尝试,但新帖子不会出现,并且带有多条评论的帖子会出现多次:Ruby on rails “我怎么能?”;“颠簸”;有最新评论的帖子和没有评论的新帖子出现在Rails的顶部?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,例如:我想要一篇刚刚提交的文章出现在页面顶部。如果有人在一篇老帖子上发表评论,我现在想把它放在最上面 这是我的尝试,但新帖子不会出现,并且带有多条评论的帖子会出现多次: @posts = Post.joins(:comments).order("comments.created_at desc") 您应该尝试使用touch:。每一条新评论都会更新帖子的更新内容。只需遵循以下注释模型代码: belongs_to :post, touch: true 更多信息:。这是一个多方面的问题touch按
@posts = Post.joins(:comments).order("comments.created_at desc")
您应该尝试使用
touch:
。每一条新评论都会更新帖子的更新内容。只需遵循以下注释模型代码:
belongs_to :post, touch: true
更多信息:。这是一个多方面的问题
touch
按中的建议执行所需操作
要实现“回滚”,您需要做几件事
一,。在注释中添加一列,将当前的更新内容存储在帖子的值处:
$ rails g migration add_post_date_to_comments post_date:datetime
$ rake db:migrate
二,。在注释创建中添加回调。使用“创建后”获取“触摸”时间戳
after_create { update(post_date: post.updated_at) }
iii.添加评论销毁回调,回滚帖子更新日期
around_destroy {
if post.updated_at == created_at
post.update_column(:updated_at, post_date)
end # only rollback if this is the latest comment
}
这应该可以解决问题。你试过你的查询了吗?有什么问题吗?事实上我错了……新帖子根本不会出现,而带有评论的帖子会出现多次,具体取决于评论的数量。谢谢。理想情况下,如果添加然后删除评论不会使帖子位于顶部,那就太好了,但情况并非如此。@mhna在这种情况下,您应该将touch
to comments#create方法,如:if post.comment.save?post.touch
也许我在我的评论控制器中添加了错误的内容,但这似乎仍然会保留删除的评论文章。@mhna您能显示控制器代码吗?另外,如果你把touch
放到控制器上,别忘了把他从模型中移除。def create/n@post=post.find(params[:post\u id])/n@comment=@post.comments.new(comment\u params)/n If@comment.save/n@post.touch/n end/n重定向到post\u路径(@post)/n end
我不确定如何设置评论的格式。虽然这篇只有代码的帖子可能会回答这个问题,但请添加一个解释,说明为什么会这样做。
around_destroy {
if post.updated_at == created_at
post.update_column(:updated_at, post_date)
end # only rollback if this is the latest comment
}