Rails 3.1 с Asset Pipeline, link_to: подтвердить сообщение, отображаемое дважды?
Хорошо, поэтому я видел этот вопрос об этой проблеме, вызванной несколькими связями jQuery или Prototype, но я могу подтвердить, что я только привязываюсь к jQuery один раз на всей странице. Моя проблема заключается в следующем: когда у меня есть link_to
, который подтверждает удаление, всплывающее окно отображается дважды. Здесь применимый код в моем шаблоне (написанный в Slim):
link_to('Destroy', depot_path(@depot.id), :confirm => "Really?", :method => :delete)
Я запускаю Rails 3.1.0, когда включен входящий в состав Asset Pipeline, с gem 'jquery-rails'
в моем Gemfile
, а следующий файл находится в моем файле application.js
(который скомпилирован Звездочки для конвейера активов).
//= require jquery
//= require jquery_ujs
//= require 'underscore'
//= require 'backbone'
У меня есть underscore.js
и backbone.js
в моем каталоге /vendor/assets/javascripts/
, и звездочки, похоже, все в порядке. Я также просматривал файл application.js
, который запускает sprockets, и jQuery находится только один раз, а jQuery UJS находится только один раз. Это то, что выглядит моя голова, когда моя страница отображается (я опустил значение csrf-token
для отображения, FWIW).
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type">
<title>Administration</title>
<link href="/assets/screen.css" media="screen" rel="stylesheet" type="text/css" />
<script src="/assets/application.js" type="text/javascript"></script>
<meta content="authenticity_token" name="csrf-param" />
<meta content="--token--omitted--" name="csrf-token" />
<script src="/assets/common/subdata.js" type="text/javascript"></script>
<link href="/assets/show.css" media="screen" rel="stylesheet" type="text/css" />
</head>
subdata.js
имеет в нем некоторый код конкретной базы; ничего, что бы хотело включить jQuery снова. Так что же сделка? У меня нет дополнительного файла jQuery в любом месте моего проекта; все это управлялось с помощью драгоценного камня jquery-rails
. Что заставляет мой метод :confirm
запускаться дважды?
РЕДАКТИРОВАТЬ. Ранее я видел это на RC5 Rails 3.1, но теперь я также вижу его на Rails 3.1.
Ответы
Ответ 1
Это произошло со мной, потому что я запускал rake assets:precompile
в моей среде разработки, создавая public/assets/application.js
. Это делает запросы для /assets/application.js
обслуживаться этим статическим файлом, который содержит все скрипты // require
в public/assets/application.js
, скомпилированные вместе, заставляя их загружаться еще раз.
В режиме разработки <%= javascript_include_tag "application" %>
будет расширяться до нескольких тегов <script>
, по одному для каждого файла, необходимого для строк // require
, а также для application.js
, содержащего только собственное содержимое.
Решение состоит в том, чтобы удалить весь каталог public/assets
вручную или использовать команду assets:clean
rake. Это приведет к тому, что файлы сценариев будут обслуживаться динамически снова.
Ответ 2
Это происходило со мной тоже. Удаление "//= require_tree." из application.js исправил его.
Ответ 3
Упомяните имя jquery и jquery_ujs с версией в application.js, если все еще не тренируйтесь, затем возьмите сжатую версию jquery и jquery_ujs.
или
Добавьте gem 'jquery-rails' в свой gemfile, затем попробуйте.
Ответ 4
Возможно, у вас есть файл rails.js. Удалите его и повторите попытку. Он должен работать.
Fon