Хорошо, проблема, похоже, исходит от ExecJS, который в основном является жемчужиной, которая имеет дело с JS в Ruby.
Оскорбительная строка: <%= stylesheet_link_tag 'application', media: 'all' %>
(как вы можете видеть, я теряю бит турболинк, потому что я не использую турболинк)
Что это значит? В основном эта строка предназначена для выделенного листа кода JS, прикрепленного к этой странице.
где находится этот код? In application.html.erb
. application.html.erb
является макетом представления по умолчанию. Это означает, что каждое представление, инициируемое вашим кодом, наследуется от этого «основного» представления.
Так что в основном ваша маршрутизация хороша, если ошибка переходит на этот этап. Ваше действие с колбасой # тунца запускается, а затем отображается представление `tuna.html.erb", но с ошибкой в этом главном представлении.
В основном, потому что у вас есть ошибка на application.html.erb
, вы получите ту же ошибку для каждого действия любого контроллера и каждого сработавшего представления.
Теперь, в чем проблема? Ну, я никогда не допускал этой ошибки, но пропуск кофе, кажется, решил вашу проблему. Хотя в моем случае у меня есть gem 'coffee-rails'
, и некоторые из моих файлов JS на самом деле являются файлами coffee.erb, и я не получаю ту же ошибку. Так что я думаю, что это немного сложнее, чем это ..
Но для того, чтобы вы лучше понимали Rails, эта строка, как я уже говорил ранее, компилирует некоторый JS и присоединяет его к файлу основного представления (затем к каждому представлению вашего приложения)
Теперь, если вы хотите знать, что JS будет скомпилировано в этот отдельный лист, посмотрите на файл app/assets/javascrips/application.js
.
Вы должны получить что-то вроде:
// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file.
//
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require jquery3
//= require jquery_ujs
//= require bootstrap
//= require cable
//= require rails.validations
//= require footer.js
//= require serviceworker-companion
Все выглядит так, как будто оно закомментировано, но на самом деле последние строки с //= require
фактически собирают JS из разных драгоценных камней. (Jquery, ...)
В моем случае: Jquery, Bootstrap, actioncable ... это Js, которые мне нужны на каждой странице моего приложения ...
Что касается вашего вопроса о хорошем учебнике, то я предпочитаю учебник по началу работы на сайте Rails: https://guides.rubyonrails.org/getting_started.html
EDIT
Моя ошибка. Это таблица стилей, которая создает проблему. Который я даже менее уверен, что могло вызвать это, потому что ExecJS имеет дело с кодом Js в вашем приложении, а не с CSS.
Таблица стилей работает точно так же, как указано выше для application.js
. Он связывает некоторые таблицы стилей CSS с каждой страницей вашего приложения.
Вот мой app/assets/stylesheets/application.css
/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
* compiled file so the styles you add here take precedence over styles defined in any styles
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
* file per style scope.
*
*= require navbars.css.scss
*= require footer.css.scss
*= require cookiewarning.css.scss
*= require_self
*/
@import "bootstrap-sprockets";
@import "bootstrap";
Как видите, на каждой странице моего приложения есть CSS-панель navbar и css нижнего колонтитула, а также некоторые другие CSS.
(И спасибо, что приняли мой ответ в качестве ответа, но он определенно нет, просто хотел объяснить вам, что делали :))