回答:
あなたの見解では次のようなことをしてください:
<% 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_for
and yield(:title)
ステートメントをヘルパーメソッドにカプセル化することもできます(他の人がすでに提案しているように)。ただし、このような単純なケースでは、カスタムヘルパーなしで、必要なコードを特定のビューに直接配置します。
<h1><%= content_for(:title, "Title for specific page") %></h1>
と、DOMに何も出力されません(つまり<h1></h1>
、コンテンツがありません)。しかし、私<title>Title for specific page</title>
は正しく働いています。何か案は?
これが私が使いたいシンプルなオプションです
あなたのレイアウトで
<head>
<title><%= @title %></title>
</head>
そして、あなたのページテンプレートの一番上(最初の行)
<% @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
次に、レイアウトビューで簡単に使用できます。
<title><%= page_title %></title>
...そしてビュー自体では:
<%= page_heading "Awesome" %>
この方法には、タイトルにh1タグを付けた場所をシャッフルできるという利点があり、コントローラーをきれいに保ち、厄介な@title変数がないようにします。
@content_for_title
か?
@content_for_title
。する必要があります(content_for(:title) + ' — ' if content_for?(:title)).to_s + 'My Cool Site'
。次に、それをあなたの視点から設定するには、<% content_for :title, 'My Page Title' %>
@content_for_title
はcontent_for
、このコメントが書かれた時点でを使用していたときに起こりました。これはもう当てはまらないと思いますが、最近は見ていません。Toby Jのコメントは、今日のRailsに当てはまります。元の回答を更新します。
上の改善@opsbとのより完全な形@FouZさん:
でapplication.html.erb
:
<title><%= @title || "Default Page Title" %></title>
ビューのerbファイルまたはそのコントローラーで:
<% @title = "Unique Page Title" %>
調べてくださいcontent_for
:http : //railscasts.com/episodes/8
あなたが満たそうとしているユースケースや要件の詳細がなければ、私はいくつかの代替案を考えることができます:
1)レイアウトページの1つでタイトルを切り替え、次の場所に格納されているヘルパーメソッドを使用します。 application_helper.rb
<title><%= custom_title %></title>
このアプローチにより、レイアウトページごとに一意のタイトルが与えられます。
2)Railscastsは、HEADタグの間に現れるものをロードするためにパーシャルを使用することを提案します
3)ロードイベント後にタイトルを変更する必要がある場合は、javascript / ajax呼び出しを使用してDOMを操作します。
title
要素でタグ付けされたコンテンツを実際に変更したくないのかもしれません。おそらく、ある種のパンくずリストが本当に必要なので、ユーザーは常に、サイトのナビゲーション階層に関してどこにいるかを知ることができます。私はgoldbergプラグインのやり方でうまくやったが、同じ機能を引き出す他の方法があると私は確信している。
コントローラの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メソッドで条件を設定して、コントローラーのさまざまなアクションにさまざまなタイトルを設定できます。コントローラ内の関連するすべてのページタイトルを表示できると便利です。
私が使う このプラグイン私が書いたこれらの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。application.html.erbを除くそれぞれの* .html.erbでの使用.html.erbにこれを貼り付け、ページのタイトルを指定するだけです
e.g : 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_name変数を定義することにより、ページのより具体的なタイトルを定義できます。
<title><%= (yield(:title) + " - " unless yield(:title).blank?).to_s + "This is always shown" %></title>
して、レイアウトと<% content_for :title, "Conditional title" %>
ビューのすべてのページに「デフォルトのタイトル」を作成しました。