Ruby on Rails中的嵌套布局

12

我刚开始学习Rails,正在努力弄清楚如何使嵌套布局起作用;我认为它们有点像.NET的主页(master pages)?

我遵循了 这个指南,并在我的布局目录中创建了一个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。

我确定我错过了一些基础知识,有人能指出来吗?!


可能是在Rails 3中的多级嵌套布局的重复问题。 - Pedro Rolo
3个回答

29

我已经找到了解决方案,虽然它与这篇文章中提供的不同。

我已经替换了这一行。

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

使用

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

我不确定这篇文章是错的还是我找到了错误的修复方法!请告诉我!

谢谢!


因为这篇文章让我从同样的困惑中获救了,所以我给你投了一票。 - gabe
已经过去一年了,指南中的错误依然存在。:| - unsorted

4
原始文章存在错误,您提供的解决方案是正确的。原因如下:
在 ERB(视图)中封装在 <%= %> 中的 ruby 代码的输出会添加到生成并发送到浏览器的 HTML 中。而封装在 <% %> 中的 ruby 代码的输出不会添加到 HTML 中。因此,调用 <% render :partial ... %> 没有效果,因为该 ruby 代码的结果(获取 partial)没有添加到生成的 HTML 文件中。
<% %> 通常用于条件语句和循环,就像您上面的示例一样。

0

这里有一个不同的方法来处理嵌套布局,可能会很方便。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接