contents_for在布局中设置时不显示以在动作视图中检索

时间:2011-11-08 13:40:11

标签: ruby-on-rails ruby-on-rails-3

首先,我使用的是Rails 3.1.1和Ruby 1.9.3-p0。在我的现有项目和一个新的“健全性检查”项目上进行了几个小时的实验后,我可以确认这似乎不起作用。我已经尝试过HAML和ERB,但这里是HAML版本。首先是布局文件:

/ application.html.haml
- content_for :stuff, "some content"
#content
  = yield  # lets say we are in the show action

跟随行动观点:

/ show.html.haml
= content_for :stuff

结果是显示。我希望我当然是非常错误的,因为我真的需要能够做到这一点,看起来这是一种常见的场景。这不应该工作还是不工作?如果没有,我能否就一个好的选择提出建议?谢谢!

3 个答案:

答案 0 :(得分:0)

我不知道HALM,但似乎你正在颠倒正确的顺序。

您在布局中定义content_for(application.html.erb)

<%= content_for :something if a_test %>

在你的观点中应该替换什么

<% content_for :something do %>
  Hello World
<% end %>

答案 1 :(得分:0)

我认为你错了。以下是更正后的代码,并附有一些解释:

/ application.html.haml
#content
  = yield(:stuff)  # lets say we are in the show action

/ show.html.haml
- content_for :stuff do
  = "Some content with #{some.computation}"

我改变了什么:

  • application.html.haml中,您必须指定结构,然后表示内容。这是由yield(:stuff)完成的。
  • 在您的文件show.html.haml中,您可以定义stuff的内容。这通常使用块来完成,但可以像:- content_for :stuff, "My content"
  • 那样完成

在你的评论之后,我已经理解了你真正想要达到的目标。可以肯定的是,我认为您需要以下内容:

  • 定义application.html.haml文件中的内容。
  • 仅在某些视图文件中使用该内容(在一个控制器的示例show.html.haml中)。

首先,我不明白为什么你会这样做。第二,是的,视图首先呈现。您唯一的选择是在application.html.haml文件中包含定义和用法:

/ application.html.haml
- content_for :stuff, "some content"
#content
  = yield(:stuff) if controller.action_name == 'show'

答案 2 :(得分:0)

所以我浏览了源代码,发现这实际上是不可能的,因为模板在布局文件之前呈现。我还没有提出替代解决方案。