Rails: javascript_include_tag: все цели? - PullRequest
2 голосов
/ 06 декабря 2011

У меня проблема с Rails и Jquery. Я использую AJAX, чтобы добавлять комментарии к статьям без перезагрузки. Следующий код был автоматически включен в мои views / application.html:

  <%= javascript_include_tag "application" %>
  <%= javascript_include_tag :all %>
  <%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" %>
  <%= javascript_include_tag  "http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" %>

Казалось, что все работает нормально, пока я не понял, что консоль сервера показывает следующую ошибку:

ActionController::RoutingError (No route matches [GET] "assets/all.js")

Так что, поскольку эта строка, кажется, не добавляет в приложение ничего, кроме ошибки, я удалил ее. В следующий раз, когда я запустил сервер и использовал приложение, внезапно каждый комментарий был опубликован дважды !? В остальном все по прежнему работало нормально. Поэтому я снова добавил удаленную строку, и я понятия не имею, почему, но когда я добавляю строку

<%= javascript_include_tag :all %>

снова все снова работает нормально, только один комментарий публикуется как задумано. Однако я не хочу сохранять это в коде, так как он выдает ошибку. Может кто-нибудь объяснить это поведение и сказать мне, как это исправить?

1 Ответ

4 голосов
/ 07 декабря 2011

Rails 3.1 использует звездочки для объединения файлов javascript и css.Это делает опцию :all устаревшей.Звездочки используют «волшебные» комментарии для управления включением javascript.

Таким образом, ваш application.js должен выглядеть примерно так:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_tree .

Первая строка также включает сам jQuery, так что вы не можетене нужны другие теги сценария.Все, что вам нужно, это указать на приложение.

<%= javascript_include_tag "application" %>

Если вы развертываете в производство, вам нужно запустить rake assets:precompile.

Существует Railscasts эпизод об активах, который необходимо увидеть.

...