我认为之前已经提出这个问题,但即使我搜索了Google,我还没有提出解决方案。
所以这就是我在Rails 2.3.5中尝试做的事情:
layouts/application.html.erb:
<html>
<head>
... some other stuff
<%= yield :head %>
</head>
<body>
<% content_for :head, "something that belongs in the head" %>
</body>
</html>
注意之前的产量。
。我知道Rails - 默认情况下 - 不允许在使用 yield之后定义
的内容 - 这是有意义的。我甚至试图挂钩到模板渲染过程但到目前为止没有成功。
所以我的目标是能够在部分/模板中定义content_for,并在响应发送到浏览器之前以某种方式延迟和执行“yield”。
有人想出一个解决方案吗?
问候和感谢, 弗兰克
更新的 我会选择weppos的想法并尝试使用机架中间件。感谢
答案 0 :(得分:13)
渲染过程首先加载并执行操作模板,然后使用选定的布局修饰模板。
布局从顶部渲染到底部,因此在:head
已经渲染后,您无法向:head
添加更多内容。
您需要更改策略。将片段放在局部并将其附加到您的操作视图或使用后处理策略(如Rack module / after_filter)直接更改html代码。
我可能会尝试根据实际需要找到更好的解决方案。如果您遇到此问题,可能是错误发生在其他地方,可能是在应用程序架构中。
答案 1 :(得分:7)
content_for
声明中不应该有等号。它应该是:
<% content_for :head, "Something that belongs in the head" %>
如果您在模板和部分内容中定义内容,那么它应该有效。 Railscast episode 8中介绍了这种技术。