railsでページごとにtitleタグの中身を変えたい場合などに、毎回インスタンス変数に設定したりcontent_forをviewに埋め込んだりすることがありますが、それを簡単に書けるのがmeta_tagsです。
しかし、ちょっとインターフェイスが直感的でないところがあるので簡単に使い方をメモします。
共通のtitleやmeta tagを埋め込む
application.html.erb
<head>
<% set_meta_tags site: 'My WebApp',
separator: '-',
title: 'mypage',
charset: 'utf-8',
%>
</head>
出力されるhtml
<head>
<titile>My WebApp - mypage</title>
<meta content="utf-8" name="charset">
</head>
上記のように、実際のtitleタグはsiteとtitleをseparatorで繋いだものになります。
readmeにはこの使い方で出ていますが、set_meta_tagsを2回実行しても再定義されないので、これだとページごとに動的な値をセットしようとしてもできません。
ページごとに変えたい場合は以下のようにします。
その都度定義したtitleやmeta tagを埋め込む
application.html.erb
<head>
<% display_meta_tags default_meta_tags %>
</head>
application_helper.rb
def default_meta_tags
{
site: 'My WebApp',
separator: '-',
title: 'mypage',
charset: 'utf-8'
}
end
index.html.erb
<% set_meta_tags title: 'welcome!' %>
こうするとset_meta_tagsが優先されるので、default_meta_tagsにデフォルト値を書いておいて上書きするといったことができます。
あるいは、default_meta_tagsのハッシュにmergeするようなヘルパを書いても良いかも知れません。
定義したtitleなどをview内で呼び出す
meta-tagsの定義するヘルパを使ってtitleなどを呼び出すことができます。
index.html.erb
<% set_meta_tags title: 'mypage' %>
<h1><%= title %></h1>