首页 > 解决方案 > 为什么我的页面在发表评论后没有重新加载视图?

问题描述

在创建 reddit 克隆时学习 ruby​​ on rails,当我尝试发表评论时,我的控制台返回评论已创建但它没有重新加载页面视图并且它返回一个错误说

Uncaught TypeError: Cannot set property 'innerHTML' of null

at <anonymous>:3:52

at processResponse (rails-ujs.js:283)

at rails-ujs.js:196

at XMLHttpRequest.xhr.onreadystatechange (rails-ujs.js:264)

创建.js.erb:

document.getElementById("post-comments").innerHTML = "<%= escape_javascript(render partial: 'posts/comments', locals: {comments: @comments})%>"

评论控制器:

class CommentsController < ApplicationController

    def create
        @comment = Comment.new comment_params
        @comment.account_id = current_account.id
        
        respond_to do |format|
            format.js {
                if @comment.save 
                    @comments = Comment.where(post_id: @comment.post_id)
                    render "comments/create"

                else
                    # unable to save

                end
            }
        end
    end
    def comment_params
        params.require(:comment).permit(:message, :post_id)
    end

end

更多细节,这里是 git repo

标签: javascriptruby-on-railsruby

解决方案


你做了一个选择器拼写错误,所以comment/create.js.erb像这样改变,这应该可以工作:

document.getElementById("post_comments").innerHTML = "<%= escape_javascript(render partial: 'posts/comments', locals: {comments: @comments})%>"
document.querySelector("#new_comment textarea").value = ""

这里的区别post_commentspost-comments


推荐阅读