rails content_for not working



我想让我的javascript/coffescript文件只加载在使用它们的页面上。因此,在我的application.html.erb文件中,我的头部中有以下代码

<%= yield :head %>

然后在我想要加载javascript的特定视图中,我有

<% content_for(:head) do%>
<%= javascript_include_tag 'application' %>
<% end%>

这似乎在最初起作用。当我第一次访问不希望使用javascript的页面时,没有指向js文件的链接。然而,一旦我访问了具有上述代码块的页面,链接就会显示在我访问的所有后续页面(例如主页)中。如果我刷新主页中的浏览器,链接会再次消失。。。

这本身并不是一个真正的问题,但我的应用程序中也有这个问题。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 include标记也导致我的content_for(:stylesheets)内容持续存在,即使我不想这样做。如果我在页面a上手动刷新,在我访问页面C之前,一切都会恢复正常。我甚至试着把它放在页面a视图中以消除链接,但仍然没有好的

<% content_for(:head) do%>
<% end%>

有什么想法吗?

启用涡轮链接后,它将无法工作。您需要做的是禁用涡轮链接,或者将javascript和css放在页面正文中。

更新您的config/initializers/assets.rb

在内部添加filename.js文件或**/*.jsRails.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 %>

最新更新