rails content_for не работает
Я хочу, чтобы мои файлы javascript / coffescript загружались только на страницах, которые их используют. Так что в моем файле application.html.erb у меня в голове следующий код
<%= yield :head %>
Затем в конкретном представлении, что я хочу загрузить JavaScript у меня есть
<% content_for(:head) do%>
<%= javascript_include_tag 'application' %>
<% end%>
Похоже, что это работает на начальном этапе. Когда я впервые захожу на страницы, на которых я не хочу javascript, ссылки на файлы js отсутствуют. Однако, как только я зашел на страницу с вышеуказанным блоком кода, ссылки появятся на всех последующих посещаемых мной страницах (например, на домашней странице). Если я обновлю браузер на домашней странице, ссылки снова исчезнут...
Это само по себе не является проблемой, но у меня также есть это в моем разделе application.html.erb
<style><%= yield :stylesheets %></style>
и в некоторых макетах есть CSS, который там уступает. Вот где это становится действительно странным. Допустим, на странице A нет js и дополнительного css, на странице B нет js, но есть дополнительный css, а на странице C есть и js, и дополнительный css. Затем я делаю следующее по порядку:
Visit page A => everything is fine
Visit page B => everything is fine (additional css is loaded)
visit page A again => everything is fine (additional css is not loaded)
visit page C => everything is fine (additional css and js loaded)
visit page A again => NOT GOOD!!! (additional css and js still loaded)
каким-то образом тег включения javascript также заставляет мои вещи content_for(:stylesheets) сохраняться, даже если я этого не хочу. Если я выполняю ручное обновление на странице A, все снова возвращаются к нормальной жизни, пока я не захожу на страницу C. Я даже пытался поместить это на свою страницу. Вид, чтобы избавиться от ссылок, но все равно ничего не дает.
<% content_for(:head) do%>
<% end%>
Есть идеи?
3 ответа
С включенными турболинками не получится. То, что вам нужно сделать, это либо отключить турболинки, либо поместить ваш javascript и css внутрь тела вашей страницы.
Обновите свой
config/initializers/assets.rb
Либо добавьте свой
filename.js
файл или
**/*.js
внутриRails.application.config.assets.precompile += %w( filename.js)
Бежать
RAILS_ENV=production rake assets:precompile
зависит от вашего окружения. Если вы работаете локально, пропустите эту команду, поскольку она будет предварительно компилироваться на лету в соответствии с вашей конфигурацией.
Перезагрузите приложение, оно должно работать с отключенными турболинками и выходить из головы или тела.
я использовал
<% content_for :head do %>
<% end %>
Но не использовал <%= content_for :head %> в теге заголовка моего соответствующего макета, что было проблемой для меня.
Больше они равны
<%= content_for :head %>
or
<%= yield :head %>