在我的Rails 4应用中,我有Post
和Comment
型号。
发布has_many
条评论和评论belong_to
帖子。
用户可以在帖子show.html.erb
视图中使用表单创建新评论:
<h2 class="center">COMMENT ON THIS POST</h2>
<%= form_for [@post, @post.comments.build], remote: true do |f| %>
<p>
<%= f.text_area :body, id: 'new_comment_body', placeholder: "Write your comment here..." %>
</p>
<p>
<%= f.submit "CREATE COMMENT", id: 'comment_submit' %>
</p>
<% end %>
这是我的comments_controllers.rb
:
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.build(comment_params)
@comment.user_id = current_user.id
respond_to do |format|
if @comment.save
format.html { redirect_to :back }
format.json { render :show, status: :created, location: @comment }
format.js
else
format.html { render :new }
format.json { render json: @comment.errors, status: :unprocessable_entity }
end
end
end
通过AJAX调用,我能够将新创建的评论添加到页面中:
# comments/create.js.erb
$('#post_show_comments').append("<%= j render @comment %>");
问题是,如果帖子还没有评论,则不显示#post_show_comments
div:
<% if @post.comments.any? %>
<hr>
<h2 class="center">COMMENTS</h2>
<div id="post_show_comments">
<%= render @comments %>
</div>
<% end %>
因此,当创建帖子的第一条评论时,它不会附加到div,并且用户需要手动重新加载页面以查看评论。
如果还没有评论,如何修改comments/create.js.erb
文件的内容以显示#post_show_comments
div,然后添加新评论?
答案 0 :(得分:3)
与OscuroAA建议的一致
<div id="post_show_comments_wrapper" style="<%= "display:none" if @post.comments.none? %>">
<hr>
<h2 class="center">COMMENTS</h2>
<div id="post_show_comments">
<%= render @comments %>
</div>
</div>
在视图中
# comments/create.js.erb
$('#post_show_comments_wrapper').show();
$('#post_show_comments').append("<%= j render @comment %>");
另一种选择是重新构建View UI,以便显示评论标题并显示&#34;还没有评论&#34;或&#34;输入第一条评论&#34;作为表格的提示。然后,列表的空div将已经呈现并正常显示。