在我的application.html.erb中,<title>MySite</title>
中有<head>
。但在用户#show页面上我想要<title><%= user.name %></title>
。
Railsy覆盖它的方法是什么?
答案 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_name
和action_name
参数方法来检查正在调用的控制器以及控制器用于选择要显示的标题的操作。你可以尝试
<% if controller_name == "users" && action_name == "show" %>
<title><%= user.name %></title>
<% else %>
<title>MySite</title>
<% end %>
请注意,如果控制器不是用户控制器,则条件会短路。
您可以找到more on this in the rails guides.
希望这有帮助!