rails content_for无法正常工作

时间:2014-01-10 22:06:12

标签: layout ruby-on-rails-4 yield 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 include标签也导致我的content_for(:stylesheets)内容持续存在,即使我不想要它。如果我在页面A上进行手动刷新,那么每个标志都会再次恢复正常,直到我访问页面C.我甚至尝试将其放在我的页面中一个视图来摆脱链接但仍然没有好处

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

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

启用turbolink后,它将无法正常工作。您需要做的是禁用turbolinks或将您的javascript和css放在页面正文中。

答案 1 :(得分:0)

更新您的config/initializers/assets.rb

将您的filename.js文件或**/*.js添加到其中 Rails.application.config.assets.precompile += %w( filename.js)

运行RAILS_ENV=production rake assets:precompile取决于您的环境。如果您是在本地工作,请跳过该命令,因为它会根据您的配置即时进行预编译。

重新启动您的应用,应关闭涡轮链接并从头或身体屈服。

答案 2 :(得分:0)

我用过

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

但没有在我的相关布局的 head 标签中使用 <%= content_for :head %> 这对我来说是个问题。

更多这些是相等的

<%= content_for :head %>
or
<%= yield :head %>