如何通过最新评论“突击”帖子并在Rails顶部显示没有评论的新帖子?

时间:2018-02-09 01:13:23

标签: ruby-on-rails ruby activerecord

例如:我想要一个刚刚提交的帖子显示在页面顶部。然后,如果有人对较旧的帖子发表评论,我现在就喜欢这个了。

这是我的尝试,但新帖子没有出现,多个评论的帖子多次出现:

@posts = Post.joins(:comments).order("comments.created_at desc")

3 个答案:

答案 0 :(得分:3)

您应该尝试使用touch:。每个新评论都会更新帖子的updated_at。只需按照此代码进行评论模型:

belongs_to :post, touch: true

更多信息:apidock/touch

答案 1 :(得分:2)

这是许多方面的问题。 touch按照Michael 's answer的建议做了你想做的事。

要实现“回滚”,您需要做一些事情。

我。在评论中添加一列,您将在其中存储帖子的当前updated_at

$ rails g migration add_post_date_to_comments post_date:datetime
$ rake db:migrate

II。在评论创建中添加回调。在创建后使用以获取“已触摸”的时间戳。

after_create { update(post_date: post.updated_at) }

III。添加注释destroy的回调,以回滚帖子的更新日期

 around_destroy { 
      if post.updated_at == created_at
          post.update_column(:updated_at, post_date)
       end # only rollback if this is the latest comment
 }

这应该可以解决问题。

答案 2 :(得分:0)

  def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.new(comment_params)
    if @comment.save
      @post.touch
    end

    redirect_to post_path(@post)
  end