【问题标题】:Rails: using "content_for" after the corresponding "yield" inside layoutRails:在相应的“yield”内部布局之后使用“content_for”
【发布时间】:2011-01-02 20:39:42
【问题描述】:

我想这个问题以前有人问过,但即使我在 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>

注意 content_for 之前的产量。

我知道 Rails - 默认情况下 - 不允许在使用后定义 :head 的内容 yield 是有道理的。

我什至尝试挂钩到模板渲染过程,但到目前为止没有成功。

所以我的目标是能够在部分/模板中定义 content_for,并在响应发送到浏览器之前以某种方式延迟和执行“yield”。

有人想出了解决办法吗?

问候和感谢, 弗兰克

更新 我会按照 weppos 的想法去尝试机架中间件。谢谢

【问题讨论】:

    标签: ruby-on-rails rendering yield delay


    【解决方案1】:

    渲染过程首先加载并执行动作模板,然后用选定的布局装饰模板。 布局是从上到下呈现的,因此在:head 已经呈现后,您无法向:head 添加更多内容。

    您需要改变策略。要么将片段放在一个部分中并将其附加到您的操作视图中,要么使用诸如 Rack 模块/after_filter 之类的后处理策略来直接更改 html 代码。

    我可能会尝试根据我的实际需要找到更好的解决方案。如果您遇到此问题,则错误可能出在其他地方,可能在应用架构中。

    【讨论】:

      【解决方案2】:

      content_for 语句中不应有等号。应该是:

      <% content_for :head, "Something that belongs in the head" %>
      

      如果您在模板和部分中定义内容,那么它应该可以工作。 Railscast episode 8 中介绍了这项技术。

      【讨论】:

        猜你喜欢
        • 2013-02-26
        • 2020-03-08
        • 2011-05-09
        • 2011-12-02
        • 2021-06-06
        • 2011-09-19
        • 2011-08-20
        • 2015-06-05
        • 1970-01-01
        相关资源
        最近更新 更多