Проблемы с UJS
Я успешно добавил UJS в одном приложении rails (3.2.6). Добавление:remote => true к моему тегу формы позволяет мне делать ajax-вызовы к моим js.erb-файлам для динамической загрузки div, ect..
Но в другом приложении на той же машине (Ubuntu 12.0.4) кажется, что движок ujs не работает. Я всегда получаю шаблон не найден, потому что форма отправляет формат => HTML, а не JS. Если я заставлю форму использовать формат js (format => 'js'), она просто визуализирует файл js.erb, а не вызывает его через ajax.
В application.js я включил правильные заголовки со следующим:
//= require jquery
//= require jquery_ujs
//= require_tree .
Файлы javascript включаются, когда я на самом деле перехожу на основную домашнюю страницу, которая использует макет приложения, который включает в себя вышеупомянутые ссылки javascirpt. Форма на странице выглядит следующим образом:
<%= form_tag list_path, :remote => true, :id => 'frmBookResults', :method => :post do %>
Но хотя он содержит:remote => true и есть маршрут, установленный для list_path (маршрут работает, потому что, если я изменю list.js.erb на list.html.erb, представление рендерится), и метод в контроллере чтобы обработать запрос (def list....end), последующий list.js.erb игнорируется, и я получаю ошибку "шаблон не найден", потому что rails обрабатывает запрос формы как html, что я могу подтвердить в журнале.
Я искал везде, где мог найти решение, но не могу понять, почему мой пользовательский интерфейс не работает для этого конкретного приложения, когда он почти идентичен моему рабочему приложению, гемсету, версиям и конфигурации.
Я нашел несколько других статей о переполнении стека, где у людей была та же самая проблема, но окончательного, рабочего ответа не было дано.
Любая помощь или направление будет принята с благодарностью.
1 ответ
Это была действительно проблема с разрывом Ajax. Триггер onkeyup, который я использовал для отправки формы, был следующим:
<%= form_tag list_path, :id => 'frmBookResults', :remote => true do %>
<input id='keyword' type='text' onkeyup='document.forms["frmBookResults"].submit();'/>
<% end %>
Обратите внимание на следующее:
document.forms["frmBookResults"].submit();
Очевидно, что отправка формы через javascript была проблемой, потому что, когда я обновил onkeyup для использования отправки jquery, как описано ниже, сработал rails ujs и сработали вызовы ajax в мой list.js.erb:
onkeyup="jQuery('#frmBookResults').submit()"
Спасибо за все отзывы mccanff! Ваш вклад вместе с другими разработчиками из группы rails в LinkIn помог мне, наконец, решить мою проблему.