2016-09-05 3 views
0

Я пытаюсь использовать JavaScript с jquery в rails для обновления div без перезагрузки страницы. Его работа, но комментарий создается дважды. Я знаю, что что-то не так в частичной части, но не могло понять. Любая помощь?Почему ссылка link_to отправляется дважды?

Следующие файлы -

_new_comment.html.erb

<%= form_for [:home, Comment.new], :url => home_comments_path, :html => {:id => "comment-new-" + post.id.to_s} do |f| %> 

    <div> 
     <%= f.text_area :message, :class => "message-area-" + post.id.to_s, :placeholder => "Add comment..." %> 

     <%= f.hidden_field :post_id, :value => post.id %> 

     <span class="new-comment"><%= link_to 'Add', '#', remote: true, :onclick => "$('#comment-new-#{post.id}').submit()" %></span> 
    </div> 

<% end %> 

comments_controller.rb

def create 
    @comment = Comment.new(comment_params) 
    @comment.user_id = current_user.id 

    if @comment.save 
     flash[:notice] = 'Comment added sucessfully' 
     respond_to do |format| 
      format.html { redirect_to home_posts_url } 
      format.js 
     end 
    end 
end 

create.js.erb

$("#comment-new-83").before('<div class="notice"><%= escape_javascript(flash[:notice]) %></div>'); 
$("#comment-new-83")[0].reset(); 

домой. js

jQuery.ajaxSetup({ 
    'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")} 
}) 

$(document).ready(function() { 
    $("#comment-new-83").submit(function() { 
     $.post($(this).attr("action"), $(this).serialize(), null, "script"); 
     return false; 
    }) 
}) 
+0

Удалить 'Пульт дистанционного управления: true' от' link_to' и попытаться также ': onclick'. –

+0

где я буду использовать onclick? – Beginner1111

+0

Вам не нужно помещать ': onclick' в любом месте, потому что вы уже привязываете событие' submit' к форме. –

ответ

0

form_for будет автоматически отправляться на контроллер. Вам не нужно явно отправлять форму с помощью jquery.

Reference

+0

Yup. Решаемые. Добавлен remote: true в инструкции form_for, и все сделано. Спасибо – Beginner1111