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

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.

4b9b3361

Ответ 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