Стандартная ссылка Удалить не работает с Rails3 + JQuery UJS - PullRequest
2 голосов
/ 15 декабря 2010

Я создаю приложение Ruby On Rails 3.0.3 с JQuery 1.4.4 и jQuery UJS rails.js (https://github.com/rails/jquery-ujs)

У меня есть модель / представление / контроллер, сгенерированная скаффолдом - Документ, в котором у меня есть ссылка для удаления в файле app / views / documents / index.html.haml:

link_to "delete", document, :confirm => "Are you sure?", :method => :delete

Это генерирует этот HTML:

<a href="/documents/1" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Destroy</a>

Что, кажется, очень хорошо.

Когда я нажимаю эту ссылку " Уничтожить ", я вижу браузер Подтверждение () , а когда нажимаю Отмена Я ожидаю, что ничего не произойдет.

НО

Функциональность удаления происходит, и документ удаляется.

У кого-то такая же проблема или я что-то не так делаю?

В настоящее время я выкопал это далеко:

Я посмотрел на jquery-ujs rails.js, и есть два .live () событий, прикрепленных к одному и тому же якору:

1) $ ('a [подтверждение данных], ввод [подтверждение данных]'). Live ('щелчок', функция () {...}

2) $ ('a [метод данных]: not ([data-remote])'). Live ('click', function (e) {...}

Сначала live () выполнить return false; , что, как я понимаю, должно затормозить всю цепочку выполнения, но это не так. Второй live () все еще выполняется, и этот второй live () - это место, где создается и отправляется форма для уничтожения.

Ответы [ 5 ]

6 голосов
/ 19 декабря 2010

Обновление до последней версии rails.js (для jQuery) решит проблему.

https://github.com/rails/jquery-ujs/raw/master/src/rails.js

2 голосов
/ 06 февраля 2011

Вы также должны убедиться, что ваша ссылка на rails.js ПОСЛЕ ваших ссылок jquery.У меня было <% = javascript_include_tags "rails", "jquery" ....%>, и для этого нужно, чтобы в конце были railsrails.js использует многие функции, созданные jquery, поэтому их необходимо инициализировать перед вызовом rails, чтобы их можно было использовать.

1 голос
/ 07 июля 2011

Я пока не могу проголосовать, но моя проблема была такой же, как у Дэвида выше.Убедитесь, что rails.js приходит после ваших ссылок jquery.Это и то, что у вас есть тег CSRF в вашем файле application.html.erb, например:

application.html.erb

  <head>
<title><%= title %></title>
<%= render 'layouts/stylesheets' %>
<script src="http://jquery.com/src/jquery-latest.js"></script>
<%= javascript_include_tag :defaults %>
<%= javascript_include_tag :all %>
<%= csrf_meta_tag %>

Подробнее о CSRFздесь: http://www.themodestrubyist.com/2010/02/24/rails-3-ujs-and-csrf-meta-tags/

0 голосов
/ 09 сентября 2011

При использовании Javascript для генерации HTML-кода для ссылки удаления не забудьте атрибут data-remote = "true" в дополнение к data-method = "delete"

0 голосов
/ 08 августа 2011

У меня была похожая ошибка.

Сначала вам нужно использовать button_to для получения действия POST, необходимого для удаления.

Во-вторых, вы должны убедиться, что версия jquery, необходимая для jquery-ujs (https://github.com/rails/jquery-ujs/raw/master/src/rails.js) - это версия, которую вы используете. Последняя версия jquery-ujs требует jquery-1.6.0 или более поздней версии. Я использовал старая версия.

...