为什么我的部分 rails 渲染不正确?
Why is my partial not rails rendering properly?
我想在不刷新应用程序页面的情况下添加评论。但是,我的部分无法正确加载我正在实现的 JS 功能。
我在我的日志或控制台中没有收到任何错误,并且在我刷新页面后显示评论,但如果不刷新它就不会发生。
此外,当我只编写 JS 将最后一条评论附加到 win_com id 时,代码有效。我希望 HTML 通过 JS 动态显示部分评论的当前状态,而不是仅仅附加最后一条评论。任何帮助,将不胜感激!这是我的代码:
comments_controller.rb:
def create
@window = Window.find(params[:window_id])
@comment = @window.comments.build(comment_params)
@comment.user_id = current_user.id
if @comment.save
respond_to do |format|
format.html { redirect_to post_path(@post) }
format.js
end
end
end
views/windows/show.html.erb:(部分大图)
<div class="row col-md-7" id="win_com">
<h4>User Comments</h4>
<%= render partial: '/windows/comment', collection: @comments %>
</div>
views/windows/_comment.html.erb:
<div class="container">
<div class="row col-md-7">
<p><%= comment.body %></p>
<p><%= link_to "Delete", [comment.window, comment], method: :delete,
data: {confirm: "Are you sure?"} %></p>
</div>
</div>
views/comments/create.js.erb:
$('#win_com').html("<%= j render(partial:'/windows/comment', collection: @comments)%>");
application.js:
//= require jquery
//= require jquery_ujs
//= require bootstrap-sprockets
//= require turbolinks
//= require_tree .
也许我的服务器日志中有一些关键行?:
Rendered windows/_comment.html.erb (0.0ms)
Rendered comments/create.js.erb (1.8ms)
.html() 将替换目标 DOM 元素的所有内容,而不是使用 .append()
替换为:
$('#win_com').html( "<%= j(render(partial:'/windows/comment', collection: @comments)) %>" );
有了那个:
$('#win_com').append( "<%= j(render(partial:'/windows/comment', collection: @comments)) %>" );
您在创建控制器操作时缺少@comments 实例变量。 Rails 除非您指定它,否则无法神奇地知道它是什么。您可以将创建操作更改为类似这样的内容。
def create
@window = Window.find(params[:window_id])
@comment = @window.comments.build(comment_params)
@comment.user_id = current_user.id
if @comment.save
@comments = @post.comments //given that this is defined.
respond_to do |format|
format.html { redirect_to post_path(@post) }
format.js
end
end
end
我想在不刷新应用程序页面的情况下添加评论。但是,我的部分无法正确加载我正在实现的 JS 功能。
我在我的日志或控制台中没有收到任何错误,并且在我刷新页面后显示评论,但如果不刷新它就不会发生。
此外,当我只编写 JS 将最后一条评论附加到 win_com id 时,代码有效。我希望 HTML 通过 JS 动态显示部分评论的当前状态,而不是仅仅附加最后一条评论。任何帮助,将不胜感激!这是我的代码:
comments_controller.rb:
def create
@window = Window.find(params[:window_id])
@comment = @window.comments.build(comment_params)
@comment.user_id = current_user.id
if @comment.save
respond_to do |format|
format.html { redirect_to post_path(@post) }
format.js
end
end
end
views/windows/show.html.erb:(部分大图)
<div class="row col-md-7" id="win_com">
<h4>User Comments</h4>
<%= render partial: '/windows/comment', collection: @comments %>
</div>
views/windows/_comment.html.erb:
<div class="container">
<div class="row col-md-7">
<p><%= comment.body %></p>
<p><%= link_to "Delete", [comment.window, comment], method: :delete,
data: {confirm: "Are you sure?"} %></p>
</div>
</div>
views/comments/create.js.erb:
$('#win_com').html("<%= j render(partial:'/windows/comment', collection: @comments)%>");
application.js:
//= require jquery
//= require jquery_ujs
//= require bootstrap-sprockets
//= require turbolinks
//= require_tree .
也许我的服务器日志中有一些关键行?:
Rendered windows/_comment.html.erb (0.0ms)
Rendered comments/create.js.erb (1.8ms)
.html() 将替换目标 DOM 元素的所有内容,而不是使用 .append()
替换为:
$('#win_com').html( "<%= j(render(partial:'/windows/comment', collection: @comments)) %>" );
有了那个:
$('#win_com').append( "<%= j(render(partial:'/windows/comment', collection: @comments)) %>" );
您在创建控制器操作时缺少@comments 实例变量。 Rails 除非您指定它,否则无法神奇地知道它是什么。您可以将创建操作更改为类似这样的内容。
def create
@window = Window.find(params[:window_id])
@comment = @window.comments.build(comment_params)
@comment.user_id = current_user.id
if @comment.save
@comments = @post.comments //given that this is defined.
respond_to do |format|
format.html { redirect_to post_path(@post) }
format.js
end
end
end