Rails - макет приложения не отображается на страницах шоу, новых и редактирования.

Я добавил несколько пользовательских файлов CSS и JS в свое приложение Rails 4.1. Страница макета приложения содержит код для панели навигации, меню навигации слева и место для выхода. Файлы JS и CSS правильно упоминаются в файле, и все они добавляются для прекомпиляции в application.rb

<script src="assets/jquery.min.js"></script>
  <!-- Bootstrap -->
  <script src="assets/bootstrap.js"></script>
  <!-- App -->
  <script src="assets/app.js"></script>
  <script src="assets/app.plugin.js"></script>
  <script src="assets/jquery.slimscroll.min.js"></script>

Теперь этот макет отлично работает для индексных страниц. Но, когда я добираюсь до шоу, новых и редактирующих страниц, макет ломается. Файлы CSS или JS в каталоге ресурсов не распознаются.

В терминале я заметил, что когда я нажимаю на ссылку, скажем, http://localhost:3000/groups/1Вижу ошибки типа "ActionController::RoutingError (No route matches [GET] "/groups/assets/app.js") а также ActionController::RoutingError (No route matches [GET] "/groups/assets/bootstrap.css"),

По сути, все файлы, упомянутые в макете приложения, не распознаются, и существует ошибка маршрутизации. То же самое происходит для всех объектов. Я проверил некоторые SO-решения, и все контроллеры наследуются от ApplicationController.

Может кто-нибудь дать мне знать, что не так? Зачем приложению искать ресурсы в папке ресурсов каждого объекта, а не в глобальном местоположении?

PS: я не уверен, какой код вставить сюда, это поможет разобраться. Пожалуйста, дайте мне знать, если вам нужно взглянуть на конкретную страницу.

2 ответа

Решение

В Rails есть помощники вида для правильного обращения к вашим ресурсам CSS и JavaScript. В настоящее время путь к ресурсу не всегда относится к корневому каталогу (поскольку он не имеет префикса /), что вызывает проблемы для вас.

Используйте такие помощники в вашем макете:

<%= stylesheet_link_tag    'application' %>
<%= javascript_include_tag 'application' %>

Узнайте больше о Asset Pipeline в документации по Rails.

Вы используете относительный URL assets/...поэтому, когда вы получаете доступ к index страница в /groups вы загружаете ресурсы с /groups/assets/...,

Вместо этого вы можете использовать абсолютный путь: /assets/groups/... Если ресурсы были загружены правильно для страницы индекса, теперь они будут загружены правильно для всех страниц.

Однако, как упомянул @fivedigit, вы действительно должны использовать помощники по ресурсам Rails. Это установит правильный URL как в режиме разработки, так и при компиляции ресурсов в производственном режиме.

Другие вопросы по тегам