RoR - 我可以在应用程序布局中显示%yield%之外的页眉吗?

时间:2016-02-11 06:38:45

标签: html ruby-on-rails

我终于找到了一个我想要使用的漂亮主题,现在我想在这里尝试一些东西。主页面基本上是一个背景,页面内容(页面标题除外)位于白色背景区域内。

因此,我想知道我是否真的只能在这个特定区域之外显示页面标题,并将其余内容呈现在特定区域内。

以下是我的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>

2 个答案:

答案 0 :(得分:2)

除了&#34; main&#34;之外,

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%肯定,但这对我有用。任何更好的解决方案都会很棒。谢谢你们。