首先,我使用的是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
结果是显示无。我希望我当然是非常错误的,因为我真的需要能够做到这一点,看起来这是一种常见的场景。这不应该工作还是不工作?如果没有,我能否就一个好的选择提出建议?谢谢!
答案 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)
所以我浏览了源代码,发现这实际上是不可能的,因为模板在布局文件之前呈现。我还没有提出替代解决方案。