在轨道上的ruby中嵌套布局

时间:2009-04-12 15:38:17

标签: ruby-on-rails

我是rails的新手,正在尝试找出如何使嵌套布局正常工作;我假设他们有点像.net母版页?

我已经关注this guide了,我在我的布局目录中创建了一个application.erb.html,其中包含:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
  <title><%= @page_title or 'Page Title' %></title>
  <%= stylesheet_link_tag 'layout' %>
  <style type="text/css"><%= yield :stylesheets %></style>
</head>
<body>

<%= yield(:content) or yield %>

</body>
</html>

并将我现有的一个布局修改为:

<% content_for :stylesheets do %>

<% end -%>

<% content_for :content do %>
  <p style="color: green"><%= flash[:notice] %></p>
  <%= yield %>
<% end -%>

<% render :file => 'layouts/application' %>

当我在浏览器中查看我的一个视图时,绝对没有任何内容呈现;当我查看源代码时,没有HTML。

我确信我错过了一些基本的东西,有人能说出来吗?!

3 个答案:

答案 0 :(得分:29)

我已经找到了解决方案,虽然它不是this article中给出的

我已经替换了这一行

<% render :file => 'layouts/application' %>

<%= render :file => 'layouts/application' %>

我不确定这篇文章是不是错了,或者我找错了解决它的方法!请告诉我!

干杯

答案 1 :(得分:4)

原始文章有错误,您的解决方案是正确的。原因如下:

包含在&lt;%=%&gt;中的ERB(视图)中的ruby代码输出被添加到生成并发送到浏览器的HTML中。包含在&lt; %%&gt;中的ruby代码的输出没有添加到HTML中。所以调用&lt;%render:partial ...%&gt;因为ruby代码(获取部分)的结果没有添加到生成的HTML文件中,所以没有任何效果。

&lt; %%&gt;通常保留用于条件和循环,就像上面的例子中一样。

答案 2 :(得分:0)

这里有a different approach嵌套布局,可能会派上用场。