Rails 4:在AJAX调用时将部分附加到隐藏的div

时间:2015-11-20 23:01:06

标签: javascript jquery ruby-on-rails ajax ruby-on-rails-4

在我的Rails 4应用中,我有PostComment型号。

发布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,然后添加新评论?

1 个答案:

答案 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将已经呈现并正常显示。