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' %>
Вы используете относительный URL assets/...
поэтому, когда вы получаете доступ к index
страница в /groups
вы загружаете ресурсы с /groups/assets/...
,
Вместо этого вы можете использовать абсолютный путь: /assets/groups/...
Если ресурсы были загружены правильно для страницы индекса, теперь они будут загружены правильно для всех страниц.
Однако, как упомянул @fivedigit, вы действительно должны использовать помощники по ресурсам Rails. Это установит правильный URL как в режиме разработки, так и при компиляции ресурсов в производственном режиме.