我终于找到了一个我想要使用的漂亮主题,现在我想在这里尝试一些东西。主页面基本上是一个背景,页面内容(页面标题除外)位于白色背景区域内。
因此,我想知道我是否真的只能在这个特定区域之外显示页面标题,并将其余内容呈现在特定区域内。
以下是我的layouts / application.html.erb文件的示例:
<!DOCTYPE html>
<html>
<head>
<title>Subzero</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag "application", params[:controller] %>
<%= csrf_meta_tags %>
</head>
<body>
<%= render "layouts/navbar" %>
<div id="main" role="main">
<%= render 'layouts/ribbon' %>
<div id="content">
<div class="row">
<div class="col-xs-12 col-sm-7 col-md-7 col-lg-4">
<h1 class="page-title txt-color-blueDark">
Wanting to put page title here.
</h1>
</div>
</div>
<div class="well">
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
<div class="container">
<%= yield %>
</div>
</div>
</div>
</div>
<%= render "layouts/footer" %>
</body>
</html>
答案 0 :(得分:2)
Rails还允许你有几个命名的产量。产率。
使用标识插槽的符号创建命名yield 调用yield:
yield :title
要向插槽中添加内容,请使用content_for
。
content_for :title, 'Hello World!'
一个很酷的技巧是你可以在布局中声明一个yield,然后在你的主要屈服渲染时分配内容:
应用程序/视图/布局/ application.html.erb:
<header>
<%= yield :header %>
</header>
<div id="main">
<%= yield %>
</div>
应用程序/视图/富/ show.html.erb:
<% content_for :header do %>
<h1>Hello from "foo/show"</h1>
<% end %>
<p>This is the main content</p>
这将呈现:
<header>
<h1>Hello from "foo/show"</h1>
</header>
<div id="main">
<p>This is the main content</p>
</div>
另一种方法是使用实例变量:
def new
@title = 'Hello World'
end
您将在布局中打印:
<%= @title || "Welcome to my rails app" %>
对于像页面标题这样的简单字符串,后者更灵活,因为content_for
无法从控制器调用(很好)。虽然content_for
是一个在布局和视图中创建动态块的强大工具,甚至可以用来在视图中设置一种继承。
答案 1 :(得分:0)
不确定这是否是最佳做法&#34;这样做的方式,但基本上我在helpers / application.html中添加了一个函数,调用函数看起来像这样:
#helpers/application.html.erb
def pg_header(header)
@page_header = header
end
在我看来,我有一些看起来像这样的东西:
<% pg_header("Here's my page header") %>
在我的layouts / application.html中,它调用@page_header,因为我不认为我可以访问视图中的任何变量,直到发出%yield%。不是100%肯定,但这对我有用。任何更好的解决方案都会很棒。谢谢你们。