Задать вопрос
A_Modestov
@A_Modestov

Как заставить ajax выполниться один раз?

Добрый день, господа. Настиг следующий казус:
Метод контроллера работает через ajax:
def create
    @comment = @commentable.comments.new(comment_params)
    @comment.user = current_user

    respond_to do |format|
      if @comment.save
        format.js do
          PrivatePub.publish_to "/comments", comment: @comment.to_json,
                                             comment_author: @comment.user.email.to_json
          render nothing: true
        end
      else
        format.json { render json: { errors: @comment.errors.full_messages } }
      end
    end
  end


Обрабатывающий ответ js-файл:

ready = ->
  PrivatePub.subscribe '/comments', (data, channel) ->
    comment_author = $.parseJSON(data['comment_author'])
    comment_body = $.parseJSON(data['comment']).body
    commentable_id = $.parseJSON(data['comment']).commentable_id
    commentable_type = $.parseJSON(data['comment']).commentable_type

    $( '.' + commentable_type + '-comments#' + commentable_id).append(JST["templates/comment"]({comment_author: comment_author, comment: comment_body}))
    $('textarea#comment_body').val('')

$(document).ready(ready)
$(document).on('page:load', ready)
$(document).on('page:update', ready)


При первом переходе на нужную страницу и вызове метода, js выполняется несколько раз, т.е добавляется несколько комментов (в базу добавляется как положено, один). Если перезагрузить страницу и выполнить метод - все работает как задумано. В чем может быть проблема и как победить? Заранее спасибо за внимание)
  • Вопрос задан
  • 421 просмотр
Подписаться 1 Оценить 4 комментария
Пригласить эксперта
Ответы на вопрос 2
A_Modestov
@A_Modestov Автор вопроса
Проблема была в turbolinks, будь он неладен. Удалил - все заработало как положено. Может кто то знает как подружить скрипты с turbolinks?
Ответ написан
Комментировать
@vsuhachev
В turbolinks'е поменялись названия событий после какой-то версии
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы