Rails:如何改变页面的标题?

什么是在不使用插件的情况下为Rails应用中的页面创build自定义标题的最佳方式?

在你的观点中做这样的事情:

<% 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_foryield(:title)语句封装在辅助方法中(正如其他人已经提出的那样)。 但是,在这种简单的情况下,我喜欢将必要的代码直接放到特定的视图中,而无需自定义帮助器。

这是一个我喜欢使用的简单选项

在你的布局

 <head> <title><%= @title %></title> </head> 

在页面模板的顶部(第一行)

 <% @title="Home" %> 

由于布局和页面模板被parsing的方式,在布局被渲染之前评估@ 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标签,并保持你的控制器很好,没有讨厌的@titlevariables。

@opsb的改进和@FouZ更完整的forms:

application.html.erb

 <title><%= @title || "Default Page Title" %></title> 

在视图erb文件或其控制器中:

 <% @title = "Unique Page Title" %> 

查看content_for : http : //railscasts.com/episodes/8

如果没有关于您正在尝试满足的用例或要求的更多细节,我可以考虑几个备选scheme:

1)将标题切换到其中一个布局页面,并使用application_helper.rb存储的辅助方法

 <title><%= custom_title %></title> 

这种方法将为您提供每个布局页面的唯一标题。

2)Railscastsbuild议使用partial来加载在HEAD标签之间显示的内容

3)如果您需要在加载事件后更改标题,请使用javascript / ajax调用来操作DOM。

也许你真的不想改变title元素标记的内容。 也许你真的需要某种types的面包屑,以便你的用户总是知道你的网站的导航层次。 虽然我已经完成了如何goldberg插件,我敢肯定还有其他方式拉动相同的function。

我使用nifty_generator的“nifty_layout”,它提供了一个标题variables,我可以在页面上使用:

<% title "Title of page" %>

我也可以使用<% title "Title of page", false %>标题只显示在浏览器标题中,而不是页面本身。

您也可以将其设置在控制器的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方法中设置条件,为控制器中的不同操作设置不同的标题。 能够在控制器中看到所有相关的页面标题是很好的。

最好/干净的方式来做到这一点:

 <title><%= @page_title or 'Page Title' %></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中,并提供页面的标题

  eg : 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_namevariables来为页面定义更具体的标题。