如何在使用布局和部分时动态显示自定义标题

时间:2015-07-21 17:03:09

标签: ruby-on-rails

我的布局和部分工作正常。问题是不同的模型都有相同的标题。如果我能为每个模型定制标题会很好。

这是我的布局:     

<html>
<head>

    <title><%= content_for :title %></title>

</head>
<body>

    <%= render 'header' %>
    <%= render "sidebar" %>
    <%= render "content" %>
    <%= render template: "layouts/footer" %>

</body>
</html>

这是我的控制器,我尝试根据undefined method `content_for' in presenter rails进行工作:

class ViewerController < ApplicationController

   def index

        helpers.content_for :title, "Viewer"
        #helpers.content_for (:title)  "Viewer" #doesn't work

   end

    def helpers 

        ActionController::Base.helpers      

    end

end

我尝试将布局更改为&lt;%= helpers.content_for:title%&gt;但它不起作用。我也尝试将控制器更改为helpers.content_for(:title)&#34; Viewer&#34;和elpers.content_for(:title)|| &#34;查看器&#34;基于其他帖子,但他们失败了。

如果这种方法不起作用,那么我向另一方开放。

3 个答案:

答案 0 :(得分:2)

我明白了。这是我的布局:

<!DOCTYPE HTML>

<html>
<head>

    <title><%= yield :title %></title>

</head>
<body>

    <%= render 'header' %>
    <%= render "sidebar" %>    
    <%= render "content" %>
    <%= render template: "layouts/footer" %>

</body>

这是我的观点(index.html.erb):

<% provide(:title, "Viewer") %>

我不知道erb会执行,即使它没有被调用在任何地方显示。我没有&lt;%= yeild%&gt;任何地方。我可以把HTML放在那里,没有人会看到它。但ruby代码将会执行。

答案 1 :(得分:0)

您的布局应为yield :title而不是content_for :title。通过这种方式,对于您的控制器,您可以正确地执行操作,并将布局的内容设置为各自的标题。

使用yield: title,您实际上与render做同样的事情,除了它由其他控制器/视图/模型处理。

答案 2 :(得分:0)

在application_helper.rb中添加以下代码:

def full_title(page_title = '')                    
  base_title = "Ruby on Rails Tutorial Sample App" 
  if page_title.empty?                             
    base_title                                     
  else
    page_title + " | " + base_title                 
end

在application.html.erb文件中添加以下代码:

<title><%= full_title(@title) %></title>

在控制器中只需将值赋给实例变量,如:

@title = "Home"

但是使用实例变量显示标题并不是一个好主意。