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 %>
Другие вопросы по тегам