Javascript 为迭代中的迭代传递局部变量create.js.erb

Javascript 为迭代中的迭代传递局部变量create.js.erb,javascript,jquery,ruby-on-rails,ajax,ruby-on-rails-5,Javascript,Jquery,Ruby On Rails,Ajax,Ruby On Rails 5,我有一个Post和一个Comment模型,而一个Post可以有多个注释,一个注释属于一个Post(和一个用户) 我通过执行@Posts.each do | d |遍历所有帖子,这不是什么大问题。此外,我还通过d.comments.each do | comment |遍历了一篇文章的所有评论。也没什么大不了的 我设置了一个create.js.erb,使我的应用程序更加动态,并立即显示你在帖子下创建的评论。虽然我的表单工作正常,但我在设置create.js.erb时遇到了问题,这会给我一个Name

我有一个
Post
和一个
Comment
模型,而一个Post可以有多个注释,一个注释属于一个Post(和一个用户)

我通过执行
@Posts.each do | d |
遍历所有帖子,这不是什么大问题。此外,我还通过
d.comments.each do | comment |
遍历了一篇文章的所有评论。也没什么大不了的

我设置了一个
create.js.erb
,使我的应用程序更加动态,并立即显示你在帖子下创建的评论。虽然我的表单工作正常,但我在设置
create.js.erb
时遇到了问题,这会给我一个
NameError-未定义的局部变量或方法“comment”,你是说@备注:
提交表单内容时。在重新加载页面后,评论被添加,但我希望有一个即时更新,就像一个单页应用程序一样。我以前从未使用过ajax

如果我只在一个单独的
posts#show
视图上显示评论,我就能够解决整个问题,但是由于我在索引页上迭代每个帖子,并且希望显示每个帖子的每个评论,并且异步更新评论,我就是不知道如何做到这一点

如何创建所需的行为

对不起,如果我的问题有点不确定

comments\u controller.rb

  def create
    @user = current_user
    @comment = Comment.new(comment_params)
    @comment.user_id = @user.id

    respond_to do |format|
      if @comment.save
        format.js {}
        format.html { redirect_to root_path, notice: 'Comment added' }
        format.json { render :show, status: :created, location: @comment }
      else
        format.html { redirect_to root_path }
        format.json { render json: @comment.errors, status: :unprocessable_entity }
      end
    end
  end
posts/index.html.erb

<% @posts.each do |d| %>
  <%= d.content %>

  <div class="comment-list">
    <%= render partial: "comments/comment", collection: d.comments %>
  </div>
<% end %>
<%# d.comments.reverse.each do |comment| %>
  <%= comment.content %>
<%# end %>
$(".comment-list").append("<%= j render partial: "comments/comment" %>");
create.js.erb

<% @posts.each do |d| %>
  <%= d.content %>

  <div class="comment-list">
    <%= render partial: "comments/comment", collection: d.comments %>
  </div>
<% end %>
<%# d.comments.reverse.each do |comment| %>
  <%= comment.content %>
<%# end %>
$(".comment-list").append("<%= j render partial: "comments/comment" %>");
$(“.comment list”)。追加(“”);
$(“.comment list”)。追加(“”);
将上述代码替换为

$(".comment-list").append("<%= j render partial: "comments/comment", locals: {comment: @comment} %>");
$(“.comment list”)。追加(“”);

发布你的新评论视图我简直不敢相信。我发誓,我也是这么做的!但是现在它起作用了:D非常感谢!不客气,你可以随时联系我@Gabriel代码员你真好!也许你可以帮我做另一件事。My_comment.html.erb partial正在以“正确”的方式呈现注释。有没有办法扭转这种局面,比如说,倒过来就行了@MayurKambariya$(“.comment list”).prepend(“”);请尝试以相反的顺序使用prepend@gabriethecoder替换append