在不使用插件的情况下为Rails应用程序中的页面创建自定义标题的最佳方法是什么?
在您的视图中执行以下操作:
<% content_for :title, "Title for specific page" %><%= content_for(:title, "Title for specific page") %>
以下是布局文件:
<%= yield(:title) %> <%= yield(:title) %>
也可以将content_for
和yield(:title)
语句封装在辅助方法中(正如其他人已经建议的那样).但是,在这种简单的情况下,我喜欢将必要的代码直接放入特定的视图中,而无需自定义帮助程序.
这是我喜欢使用的简单选项
在你的布局中
<%= @title %>
在页面模板的顶部(第一行)
<% @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
然后在布局视图中,您可以简单地使用:
<%= page_title %>
......并且在视图中:
<%= page_heading "Awesome" %>
这种方式的优点是允许你在标题的h1标签贴在哪里,并保持你的控制器很好,没有讨厌的@title变量.
@opsb的改进和更完整的@FouZ形式:
在application.html.erb
:
<%= @title || "Default Page Title" %>
在视图erb文件或其控制器中:
<% @title = "Unique Page Title" %>
请查看content_for
:http://railscasts.com/episodes/8
如果没有关于您试图满足的用例或要求的进一步细节,我可以考虑几种选择:
1)在一个布局页面中切换标题并使用存储的辅助方法 application_helper.rb
<%= custom_title %>
这种方法将为每个布局页面提供一个唯一的标题.
2)Railscasts建议使用partial来加载HEAD标签之间显示的内容
3)如果需要在加载事件后更改标题,请使用javascript/ajax调用来操作DOM.
也许你真的不想改变title
元素标记的内容.也许您确实需要某种面包屑,以便您的用户始终知道他们相对于您网站的导航层次结构的位置.虽然我对goldberg插件的处理方式做得很好,但我确信还有其他方法可以实现相同的功能.