我正在尝试为应用程序布局添加布局。我无法弄清楚所有不同的布局解决方案。首先,我在布局中尝试了一个布局,因为我没有完全掌握哪些部分是什么,或者它们是否也是布局?也许我可以从这个问题开始。布局和部分之间有什么区别。
这就是我现在所拥有的。我试图将我的标题代码分开,该标题代码具有导航和一些其他元素到单独的布局中。我希望这个布局适用于所有视图。这意味着它应该是应用程序布局中的布局以及调用其控制器时调用的其他视图。我的代码中包含<%= yield%>。那个yeild工作但是:标题一个没有。
应用程序布局 app / views / layouts / application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>home</title>
<%= stylesheet_link_tag "application", :media => "all" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>
<div id="header"><%= yield(:header) %></div>
<%= yield %>
</body>
</html>
标题布局 app / views / layouts / application.html.erb
<% content_for :header %>
<p>HEADER TEXT</p>
<% end %>
为什么上面的代码不起作用?
我也看到了这样的代码,但是它给了我一个错误。
<%= render layouts/header %>
有人可以解释所有这些不同的方法。 谢谢。
答案 0 :(得分:1)
<% content_for :header do %>
<p>HEADER TEXT</p>
<% end %>
您忘记了do
答案 1 :(得分:1)
最好将页眉和页脚分隔为部分,这些部分将分别作为'_header.html.erb'和'_footer.html.erb'存在于views / layouts文件夹中。
然后你可以选择用特定的div来包装每个部分,这就是你要对标题做的事情(你也可以对身体做同样的事情),它最终看起来像这样:
<!DOCTYPE html>
<html>
<head>
<title>home</title>
<%= stylesheet_link_tag "application", :media => "all" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>
<div id="header">
<%= render 'layouts/header' %>
</div>
<%= yield %>
<div id="footer">
<%= render 'layouts/footer' %>
</div>
</body>
</html>
这将做你想做的事。
请注意,'layouts / header'和'layouts / footer'在它们周围都有'。
要回答关于布局和部分之间区别的问题,布局会在整个应用程序中使用,例如一致的页眉或页脚。部分可以是布局,但不一定是,所以您可以部分特定于您网站上的其他视图。
答案 2 :(得分:0)
所以 - 首先 - yield语法可能正确也可能不正确,但我从未见过它,我不喜欢它。我只在文件中调用一次yield。
如果你想在你的应用程序模板文件中呈现一个标题,这当然是可能的 - 我的建议是将它直接放在你的模板文件中 - 毕竟,这就是模板文件的用途。如果您想在某些原因中将标题完全封装在单独的文件中,那么您需要的是partials。你会做这样的事情:
<body>
<%= render :partial => "shared/header" %>
<%= yield %>
</body>
这会将存储在/shared/_header.html.erb中的标题内容呈现在此处的布局中。
查看this guide here了解详情