Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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 “我怎么能?”;“颠簸”;有最新评论的帖子和没有评论的新帖子出现在Rails的顶部?_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

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
 }