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