【问题标题】:Rails yield and content_for in partialRails yield 和 content_for 部分
【发布时间】:2013-02-26 15:27:11
【问题描述】:

我已经习惯在视图中使用content_foryield 来设置页面标题和其他与视图渲染相关的整洁的东西。

现在我陷入了下一个方案:LAYOUT -> VIEW (edit.html.erb) -> PARTIAL (_main.html)。即 - 视图包含一个部分。

如果我在部分中定义content_for :view_content_title, "Hello World",它可以在布局中访问,但在视图中不能 - content_for?(:view_content_title)

为什么?我该怎么办?

【问题讨论】:

  • 在检查内容存在之前还是之后在视图中呈现部分内容?
  • @khustochka 我在之后渲染它。想法是先打印出标题,然后打印出部分内容。
  • 那我想我是对的。在部分渲染之前,它的代码不会被执行,例如内容未设置。
  • 所以你的问题解释是,部分中的content_for 块一直传播到布局,但为什么视图中的产量无法访问它?跨度>
  • 我在这里找到了一些答案:stevechanin.blogspot.com/2009/11/…

标签: ruby-on-rails ruby layout partial-views yield


【解决方案1】:

我想我找到了原因。 Rails 以线性方式呈现视图。它先渲染部分视图,然后渲染部分视图,然后渲染视图的其余部分。我测试过,如果您调用 content_for? 或在渲染部分后在视图中渲染内容 - 没关系,如果之前 - 内容不存在。

并且布局是在视图之后呈现的,这就是为什么在那一刻内容已经可用,因为视图和部分已经呈现,例如执行的指令。

【讨论】:

  • 是的。我得到了同样的结果。如果我在渲染部分后放置收益 - 它可以工作,但否则 - 它不会。任何想法,我怎样才能实现我想要的行为?
  • 只是不使用content_for?很多方法取决于您要渲染的内容。只需将标题放在视图中即可。在控制器中设置实例变量。使用 i18n 引擎。
  • 这是我试图避免的事情 - 控制器。 :(
  • 这取决于标题的多样性。如果只是 Hello World,只需输入 :) 如果是博客文章标题,则使用 <%= @post.title %> 之类的内容呈现。如果标题内容本身就是一些丰富的 HTML,请考虑为标题使用单独的部分内容。
【解决方案2】:

一种可能的解决方法是布局确实可以访问 :locals,因此您可以执行以下操作:

view_file.html.erb

<%= render partial: "my_partial", layout:"my_layout", locals:{:title=>"Best Answer Ever"} %>

_my_layout.html.erb

<H1> <%= title %> </H1>
<%= yield %>

_my_partial.html.erb

All your content goes here, and this partial also has access to locals if you want to use them.

这将产生:

<H1>Best Answer Ever</H1>
All your content goes here, and this partial also has access to locals if you want to use them.

【讨论】:

    猜你喜欢
    • 2021-06-06
    • 1970-01-01
    • 2015-06-05
    • 2017-06-01
    • 2011-08-20
    • 2011-01-02
    • 2011-12-02
    • 2022-08-22
    • 2023-03-29
    相关资源
    最近更新 更多