Rails 3 - 设置页面标题的理想方式

akf*_*con 71 ruby-on-rails-3

什么是在rails 3中设置页面标题的正确方法.目前我正在做以下事情:

应用程序/视图/布局/ application.html:

<head>
  <title><%= render_title %></title>
  <%= csrf_meta_tag %>
Run Code Online (Sandbox Code Playgroud)

应用程序/佣工/ application_helper.rb:

def render_title
  return @title if defined?(@title)
  "Generic Page Title"
end
Run Code Online (Sandbox Code Playgroud)

应用程序/控制器/ some_controller.rb:

def show
  @title = "some custom page title"
end
Run Code Online (Sandbox Code Playgroud)

有没有其他/更好的方法来做上述事情?

And*_*oni 132

你可以一个简单的帮手:

def title(page_title)
  content_for :title, page_title.to_s
end
Run Code Online (Sandbox Code Playgroud)

在你的布局中使用它:

<title><%= yield(:title) %></title>
Run Code Online (Sandbox Code Playgroud)

然后从你的模板中调用它:

<% title "Your custom title" %>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 ;)

  • 我编辑了答案以反映Andrew的建议(Andrea的解决方案在rails 3中不起作用) (4认同)
  • 非常优雅;)但可能需要更改帮助器:`content_for:title,page_title.to_s` (3认同)

gri*_*ble 52

没有必要创建任何额外的函数/帮助器.你应该看看文档.

在应用程序布局中

<% if content_for?(:title) %>
  <%= content_for(:title) %>
<% else %>
  <title>Default title</title>
<% end %>
Run Code Online (Sandbox Code Playgroud)

在具体的布局中

<% content_for :title do %>
  <title>Custom title</title>
<% end %>
Run Code Online (Sandbox Code Playgroud)


Jit*_*its 41

我发现apeacox的解决方案对我不起作用(在Rails 3.0.3中).

相反,我做了......

application_helper.rb:

def title(page_title, options={})
  content_for(:title, page_title.to_s)
  return content_tag(:h1, page_title, options)
end
Run Code Online (Sandbox Code Playgroud)

在布局中:

<title><%= content_for(:title) %></title>
Run Code Online (Sandbox Code Playgroud)

在视图中:

<% title "Page Title Only" %>
Run Code Online (Sandbox Code Playgroud)

要么:

<%= title "Page Title and Heading Too" %>
Run Code Online (Sandbox Code Playgroud)

注意,这也允许我们检查是否存在标题,并在视图未指定标题的情况下设置默认标题.

在布局中我们可以做类似的事情:

<title><%= content_for?(:title) ? content_for(:title) : 'This is a default title' %></title>
Run Code Online (Sandbox Code Playgroud)

  • `content_for?(:title)|| '这是一个默认标题''更短. (4认同)
  • 我认为你在布局中想要的是:<title> <%= content_for?(:title)?yield(:title):'这是默认标题'%> </ title> (2认同)