例如:我想要一个刚刚提交的帖子显示在页面顶部。然后,如果有人对较旧的帖子发表评论,我现在就喜欢这个了。
这是我的尝试,但新帖子没有出现,多个评论的帖子多次出现:
@posts = Post.joins(:comments).order("comments.created_at desc")
答案 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