2016-08-19 7 views
0

У меня есть приложение Rails 4.2.0, которое работает уже несколько месяцев.Rails 4.2.0 приложение: удалить ссылку javascript перестали работать

Приложение имеет теги link_to в разных местах, используя «delete» в качестве метода и с подсказкой подтверждения. Они работали корректно, при этом появляется предупреждение о подтверждении перед удалением и запрос, направляемый на действие destroy в контроллере, как ожидалось.

Сегодня один из пользователей приложения спросил меня, почему ссылки удаления не работают. Предупреждение о подтверждении не отображается, и полученный запрос представляет собой простое GET, которое направляется на действие show вместо уничтожения. Хотя мои пользователи не удаляют очень часто, я уверен, что они работали изначально.

Ссылки на удаление больше не работают ни в среде разработки, ни в режиме реального времени. В консоли браузера нет ошибок javascript при загрузке страницы, содержащей ссылки, или при нажатии ссылки удаления. В Chrome, Firefox и Safari поведение одинаково.

Таинственная часть заключается в том, что я делаю в основном изменения кода и базы данных в течение нескольких месяцев; Я не могу вспомнить последний раз, когда я добавил камень или установил или обновил пакет. Очевидно, что-то должно было измениться, чтобы сломать javascript, но я не могу думать, что это может быть.

До сих пор я удалил рельсы jQuery и связал их с Google API. Я удалил Turbolinks. Я обновил jquery-rails gem от версии 4.0.3 до 4.2.1. Не повезло.

В случае, если кто может предложить что-то, чтобы проверить или посмотреть, вот некоторые выдержки из моей конфигурации и коды (после возвращения вышеуказанных неудачных попыток):

Gemfile.lock:

jquery-rails (4.0.3) 
jquery-turbolinks (2.1.0) 
jquery-ui-rails (5.0.3) 

приложений .js:

//= require jquery 
//= require jquery.turbolinks 
//= require jquery_ujs 
//= require turbolinks 
//= require jquery-ui/datepicker 
//= require jquery-ui/autocomplete 
//= require_tree . 

приложение/просмотров/макеты/application.html.erb, внутри тега:

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 

Удалять теги ссылка выглядит следующим образом:

<%= link_to 'Delete', item_order_path(@item, order), method: :delete, data: { confirm: 'Are you sure?' }, class: :button %> 

В оказанной HTML они выглядят так:

<a data-confirm="Are you sure?" class="button" rel="nofollow" data-method="delete" href="/items/1/orders/1">Delete</a> 

Любые идеи, что может быть происходит?

+0

На какой ОС вы работаете? Если это окна, попробуйте gem «coffee-script-source», «1.8.0» –

+0

Я запускаю приложение либо в Mac OS X 10.11 (разработка с использованием сервера WEBrick), либо CentOS 7 (создание, использование Apache и Passenger Phusion). – EK0

ответ

0

Ну, я выяснил, в чем проблема (и он был собой!).

Я собирался удалить вопрос в полном позоре, но потом я понял, что кому-то может быть полезно увидеть, как я обнаружил проблему.

Во-первых, я помню, что последнее изменение, связанное с драгоценными камнями, заключалось в добавлении поля автозаполнения в приложение. Поэтому я достал линию

//= require jquery-ui/autocomplete 

из приложения.js. И вуаля! Удалить ссылки снова начали работать.

Я был близок к самоуверенному обвинению jquery-ui за то, что был несовместим с javascript Rails, когда заметил, что удаление этой строки фактически бросает исключение в том месте, где мой javascript инициализировал поле автозаполнения. Это звучало подозрительно, как что-то в javascript моего приложения мешало javascript ссылки, которое исключение случайно помешало исполнить.

Итак, я вернул файл application.js и переименовал все свои активы javascript, чтобы сервер не узнал их. Удалить ссылки теперь снова работают. Затем я каждый раз восстанавливал каждый из файлов javascript, проверяя ссылки после обновления страницы. В конце концов ссылки удаления перестали работать после повторного ввода одного файла: этот файл был последним изменением.

Проблема заключалась в том, что все ссылки на удаление содержатся в таблицах, а для тех таблиц, которые я недавно добавил, обработчики кликов сортируют строки. Мой обработчик кликов для таблицы останавливал распространение в событии кликов, что мешало обработчику Rails для ссылок на удаление. Но я еще не разработал исправление, но, скорее всего, он будет более тщательно нацелен на обработчик событий сортировки, поэтому что ссылки на удаление не затронуты.