在Rails中更改控制器的标题标记

时间:2014-08-29 00:34:38

标签: ruby-on-rails ruby-on-rails-4

在我的application.html.erb中,<title>MySite</title>中有<head>。但在用户#show页面上我想要<title><%= user.name %></title>

Railsy覆盖它的方法是什么?

3 个答案:

答案 0 :(得分:3)

您应该在content_for中使用users/show.html.erb

<% content_for :title do %>
  <%= user.name %>
<% end %>

然后在你的布局中你可以这样做:

<title>
  <% if content_for? :title %>
    <%= yield :title %>
  <% else %>
    MySite
  <% end %>
</title>

答案 1 :(得分:2)

您可能希望使用名为meta-tag-helpers的外部宝石:

#app/views/layouts/application.html.erb
<head>
   <%= meta_tags %>
</head>

#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
   before_action :set_meta_tag

   private

   def set_meta_tag
      set_meta title: "MySite"
   end
end

#app/controllers/users_controller.rb
class UsersController < ApplicationController
   def show
      @user = User.find params[:id]
      set_meta title: @user.name
   end
end

这与content_for的{​​{1}}建议非常相似,但更加强大且更加强大。圆形解决方案需要注意的是fivedigit帮助器将填充所有元标记 - 包括meta_tags

答案 2 :(得分:0)

您可以使用controller_nameaction_name参数方法来检查正在调用的控制器以及控制器用于选择要显示的标题的操作。你可以尝试

<% if controller_name == "users" && action_name == "show" %>
  <title><%= user.name %></title>
<% else %>
  <title>MySite</title>
<% end %>

请注意,如果控制器不是用户控制器,则条件会短路。

您可以找到more on this in the rails guides.

希望这有帮助!