代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

Ruby on Rails的“content-for:title”如何获得稍后分配的内容?

  •  5
  • nonopolarity  · 技术社区  · 14 年前

    简单的问题是:子页面

    <% content_for :title do 'Showing product' end %>
    

    设置 :title


    细节:

    application.html.erb

    <title><%= content_for :title %>
      ...
      <%= yield %>
    

    我想 yield 返回子页的内容,例如 show.html.erb

    <%内容:标题“显示产品”结束%>
    

    怎么可能 :标题 不知怎么被上面的东西利用了 产量 ? 我以为 title 首先对零件进行评估,然后 ,那么 追溯设置的内容 <title> 标签?

    2 回复  |  直到 14 年前
        1
  •  8
  •   Jakub Hampl    14 年前

    简而言之:作弊。

    长话短说:ActionView重新定义了收益率,因此它与我们从good ol'ruby所知道和喜爱的收益率不同。实际上,模板文件在布局文件之前呈现,然后布局文件中的收益将被已呈现的模板替换。 content_for 块保存到类变量中,以便以后可以从布局中访问它们。

        2
  •  5
  •   Paul Alexander    13 年前

    我定义了一个助手方法 title 在我的 application_helper.rb

    module ApplicationHelper
      def title(page_title)
        content_for(:title){ page_title }
        page_title
      end
    end
    

    然后在我的内容ERB文件的顶部我可以这样做

    <% title "Rails Rocks" %>
    Other regular content
    

    application.html.erb

    <html>
    <head>
      <% title = yield(:title).chop! %>
      <title><%= title || 'Default Title' %></title>
    </head>
    <body>
      <h1 class="title"><%= title %></h1>
    </body>