当页面上有多个表单时,如何使用UJS在Rails 3.2中指定特定表单?

时间:2013-12-19 03:00:46

标签: ruby-on-rails forms ujs

我有一部分包含很多帖子和许多评论。我想在添加评论时通过UJS更新页面。但是,现在当我提交新评论时,它会创建一些额外的div元素(基于页面上当前有多少评论表单)。我是UJS的新手,不知道如何遍历DOM,以便我可以将评论添加到其提交的表单中。以下是我的代码,任何帮助将不胜感激。注意:这是在包含许多帖子的页面中呈现的帖子部分,因此DOM上有多个“.comment-form”类。

<article class="post speech-bubble-post">
  <header class="group">

    <div class="post-header-thumb">
      <a href="<%= user_url(post.user) %>">
        <img class="circular-thumb" src="<%= post.user.profile_photo(:thumb) %>" alt="">
      </a>
    </div>

    <div class="user-info">
      <div class="name">
        <%= post.user.full_name %>
      </div>
      <div class="role">
        <!-- user.role_in_course -->
      </div>
      <div class="post-time">
        posted <%= time_ago_in_words(post.created_at) %> ago
      </div>
    </div>
    <% if post.user == current_user || post.course.has_write_permission?(current_user) %>
      <div class="post-controls">
        <div class="post-edit">
          <%= link_to "Edit Post", edit_post_url(post) %>
        </div>
        <form class="post-delete" action="<%= post_url(post) %>" method="POST">
          <input
            type="hidden"
            name="authenticity_token"
            value="<%= form_authenticity_token %>">

          <input
            type="hidden"
            name="_method"
            value="DELETE">

          <input type="submit" value="Delete Post">
        </form>
      </div>
    <% end %>
  </header>

  <p class="post-content">
    <%= post.body %>
  </p>
</article>

<% post.comments.each do |comment| %>
  <div class="comment">
    <%= render comment %>
  </div>
<% end %>

<form 
  class="comment-form" 
  action="<%= post_comments_url(post) %>" 
  method="POST" 
  data-remote="true">

  <input
     name="authenticity_token"
     type="hidden"
     value="<%= form_authenticity_token %>">

  <label for="comment_body"></label>
  <textarea rows="1" cols="50" name="comment[body]" id="comment_body"></textarea>

  <input type="hidden" name="comment[post_id]" value="<%= post.id %>">

  <input type="submit" class="comment-submit-button" value="Comment">
</form>

<script>
$(document).ready(function(event) {

    $(".comment-form ").on("ajax:success", function(event, data){

      var $form = $(this)

      $form.prepend(data);
      $form[0].reset();
    });
});
</script>

1 个答案:

答案 0 :(得分:0)

您可以执行类似

的操作
<form id="post-<%= post.id %>" class="comment-form" ...>

<form data-post_id="post-<%= post.id %>" class="comment-form" ...>

然后如果您愿意,可以选择JS。