Answers:
在您看来,执行以下操作:
<% content_for :title, "Title for specific page" %>
<!-- or -->
<h1><%= content_for(:title, "Title for specific page") %></h1>
布局文件中包含以下内容:
<head>
<title><%= yield(:title) %></title>
<!-- Additional header tags here -->
</head>
<body>
<!-- If all pages contain a headline tag, it's preferable to put that in the layout file too -->
<h1><%= yield(:title) %></h1>
</body>
也可以将content_for
and yield(:title)
语句封装在辅助方法中(正如其他人已经建议的那样)。但是,在这种简单的情况下,我喜欢将必要的代码直接放入特定视图中,而无需自定义帮助程序。
<h1><%= content_for(:title, "Title for specific page") %></h1>
我看不到任何输出到DOM中(即,我<h1></h1>
没有内容)。但是我<title>Title for specific page</title>
的工作正常。有任何想法吗?
这是我喜欢使用的一个简单选项
在您的布局中
<head>
<title><%= @title %></title>
</head>
在页面模板的顶部(第一行)
<% @title="Home" %>
由于布局和页面模板的解析方式,在呈现布局之前先评估@ title =“ Home”。
最佳实践是使用content_for。
首先,添加几个帮助程序方法(例如,粘贴在app / helpers / application_helper.rb中):
def page_title(separator = " – ")
[content_for(:title), 'My Cool Site'].compact.join(separator)
end
def page_heading(title)
content_for(:title){ title }
content_tag(:h1, title)
end
然后,在布局视图中,您可以简单地使用:
<title><%= page_title %></title>
...以及视图本身:
<%= page_heading "Awesome" %>
这种方式的优点是可以让您在标题的h1标签处进行混洗,并使控制器保持良好状态,并且没有讨厌的@title变量。
@content_for_title
?
@content_for_title
。应该是(content_for(:title) + ' — ' if content_for?(:title)).to_s + 'My Cool Site'
。然后从您的角度进行设置,只需<% content_for :title, 'My Page Title' %>
@content_for_title
是您content_for
在撰写本评论时使用时曾经发生的事情。我相信情况已不再如此,但我最近没看过。Toby J的评论对今天的Rails是正确的。我将更新原始答案。
调查content_for
:http : //railscasts.com/episodes/8
如果没有关于您要满足的用例或需求的更多详细信息,我可以考虑以下几种选择:
1)在其中一个版面页面中切换标题,并使用存储在其中的帮助方法 application_helper.rb
<title><%= custom_title %></title>
这种方法将为您提供每个布局页面的唯一标题。
2)Railscasts建议使用局部加载来加载HEAD标签之间显示的内容
3)如果您需要在load事件之后更改标题,请使用javascript / ajax调用来操作DOM。
也许您并不是真的想要更改title
元素标记的内容。也许您确实需要某种形式的面包屑,以便您的用户始终知道他们相对于站点导航层次结构的位置。尽管我对goldberg插件的工作做得很好,但我确信还有其他方法可以实现相同的功能。
您也可以在控制器的before_filter中设置它。
# foo_controller.rb
class FooController < ApplicationController
before_filter :set_title
private
def set_title
@page_title = "Foo Page"
end
end
# application.html.erb
<h1><%= page_title %></h1>
然后,您可以在set_title方法中设置条件,以为控制器中的不同操作设置不同的标题。很高兴能够在控制器中看到所有相关的页面标题。
我用 这个插件我写的这些Rails助手:http ://web.archive.org/web/20130117090719/http: //henrik.nyh.se/2007/11/my-rails-title-helpers/
使用content_for方法和部分的页面标题的方法
1。部分名称:_page_title.html.erb
<%content_for :page_title do %>
<%=title%>
<%end%>
2。标题标签内application.html.erb中的用法
<title><%=yield :page_title %></title>
3。在各个* .html.erb中的用途(不包括application.html.erb),只需将其粘贴在任何.html.erb中并提供页面标题
e.g : inside index.html.erb
<%=render '_page_title', title: 'title_of_page'%>
简而言之,我可以这样写下来
<%content_for :page_title do %><%= t :page_title, "Name of Your Page" %> <% end %>
我想添加我的简单变体。
在ApplicationController中定义此方法:
def get_title
@action_title_name || case controller_name
when 'djs'
'Djs'
when 'photos'
'Photos'
when 'events'
'Various events'
when 'static'
'Info'
when 'club'
'My club'
when 'news'
'News'
when 'welcome'
'Welcome!'
else
'Other'
end
end
之后,您可以从布局的标题标签中调用get_title。您可以通过在操作中定义@action_title_name变量来为页面定义更具体的标题。
<title><%= (yield(:title) + " - " unless yield(:title).blank?).to_s + "This is always shown" %></title>
在布局和<% content_for :title, "Conditional title" %>
视图中)创建一个“默认标题” 。