Подтвердить что ты не робот

Link_to: подтвердить всплывающие окна дважды

Этот тег с рельсами 3

<%= link_to 'Destroy', item, :method => :delete,:confirm=>'Are you sure?' %>

создает этот html

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

Запись удалена, проблема в том, что всплывающее окно появляется дважды.

Что может быть причиной этого?

4b9b3361

Ответ 1

Похоже, что обработчик подтверждения Javascript в rails.js прилагается дважды.

Не могли бы вы случайно включить две копии rails.js через дублирование помощника javascript_include_tag?

Ответ 2

У меня была такая же проблема, и я потратил большую часть часа на это. Я нашел решение в своей ситуации, и я решил, что поделюсь им, если он поможет...

Моя проблема заключалась в том, что у меня был

config.assets.debug = true 

в config/environment/development.rb

Изменение этой строки на

config.assets.debug = false

исправлено дублирование подтверждения для меня. Я нашел соответствующую информацию в этом руководстве по рельсам для конвейера активов. Надеюсь, это поможет!

Ответ 3

Я использовал для включения javascript_include_tag в нижней части моего haml-layout файла.

С Rails4 и Turbolinks случается, что:

  • Все в порядке при первом загрузке страницы (всплывающее окно для подтверждения появляется только один раз)
  • Посещение другой страницы → всплывающее окно происходит дважды
  • Посещение еще одной страницы → всплывающее окно происходит три раза
  • и т.д.
  • пока я не перезагружу страницу.

Я решил проблему, перемещая javascript_include_tag снизу в <head>

Ответ 4

Я использую Rails 4, и ни один из ответов не работал у меня, однако следующее сработало... Я изменил строку:

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

to

<%= javascript_include_tag 'application', 'data-turbolinks-eval' => false %>.

https://github.com/rails/turbolinks/issues/244

Ответ 5

Отличные ответы здесь,

Но если вы все сделали и все равно получите эти двойные всплывающие окна, и если вы работаете в режиме разработки, проверьте, есть ли у вас public/assets, загруженный скомпилированными активами.

Удаление public/assets/* решает проблему.

Ответ 6

Кажется, это ошибка в Rails. По-видимому, директивы в application.js не только расширены в отдельные файлы, когда включен режим отладки, но также включены в application.js. Я не смотрел на код Rails для этого, но предполагаю, что это связано с тем, что application.js является файлом JavaScript по умолчанию. Если вы переименуете этот файл на что-то еще, скажем default.js, он будет в режиме отладки правильно включать файлы, указанные директивой, а default.js будет выводить только код JavaScript, который находится только в этом файле. Таким образом, не создается повторяющийся код.

Пример:

application.js

//= требуется jquery_ujs

Foo();

Результаты в:

1) jquery_ujs.js

2) application.js с содержимым jquery_ujs и foo()


default.js

//= требуется jquery_ujs

Foo();

Результаты в:

1) jquery_ujs.js

2) default.js с foo()

Ответ 7

У меня была та же проблема с Rails 3.2.12, но просто обновление до 3.2.13 решило эту проблему для меня.

Ответ 8

В моем случае (Rails 3.2.13) мне пришлось удалить rails.js, чтобы исправить ту же проблему.

Я явно не ссылался на rails.js и не менял config.assets.debug.

Ответ 9

В моем случае jQuery дважды загружался из-за строки //= require_tree .

Чтобы предотвратить эту ошибку в application.js и application.css, я использую для создания подкаталога app/assets/javascript/autorequire, а вместо require_tree . я делаю require_tree ./autorequire.

Итак, файлы в app/assets/javascript и app/assets/stylesheets не включаются автоматически/случайно. Я помещаю все мои личные .css и .js файлы в подкаталог, и они включаются неявно. Но я могу определить, какие файлы из верхнего пути должны быть включены и в каком порядке.

Так как я делаю это, у меня никогда не было проблем с активами, которые не были загружены, как я ожидаю.

Ответ 10

Так что для меня это было потому, что я определил удаленные данные, а не просто удаленные.

IE

data: {remote: true,...}

вместо

remote: true, data: {...}

надеюсь, что это поможет.

Ответ 11

В моем случае это было то, что приложение содержало как "mootools ujs", так и "jquery ujs". Я избавился от mootools один, и теперь я вижу только одно подтверждение.

Ответ 12

просто удалите турбовинты, которые работали для меня в rails4

Ответ 13

Попробуйте запустить

rake assets:precompile ENV=development 

или

rake assets:precompile ENV=production

Ответ 14

Удалить

//= require jquery
//= require jquery_ujs
//= require_tree .

из app/assets/javascripts/application.js. Несмотря на комментарий, он загружает эти js файлы. Это работает для меня.