ここではRuby on Rails にて、friendly_id gemを使った、日本語でのURLを表示する方法を紹介します。
Railsのデフォルトでは、IDによってモデルが表示されています。たとえば、Entryというモデルがあるとすると、
/entries/12345
のようなURLでEntryが表示されます。
このEntryにtitleという属性があれば、Friendly_id を導入によって、このtitleを使ってEntryを表示させることが出来ます。例えば、
/entries/日本語でもOK
この123ishのサイトでもFriendly_id を導入しています。例えば、
https://www.123ish.com/jp/entries/1461-ヴァイオリンやヴィオラの試奏(試し弾き)で気をつけておきたい3つのポイント
https://www.123ish.com/jp/entries/1316-イヤフォン越しではなく、日常に溢れる音を楽しもう!
などです。
friendly_idをそのまま導入しても、日本語でのURLは表示されません。
def normalize_friendly_id(value)
def should_generate_new_friendly_id?
def create_slug
のファンクションをオーバーライドします。ここでフレンドリーURLとして id-name の形式を使います。
また、特殊文字は ”-” へ変換します。
日本語でのフレンドリーURL導入方法
ステップ1
# /Gemfile:
gem 'friendly_id'
migrationの実行
> rails db:migrate
ステップ2 モデル、コントローラーファイルのコード
set_slug_with_idを定義して、after_commit で呼び出し、IDを使ったFriendly URLがEntryと同時に作成されます。
これ以降は普通に
entry_url(@entry)
によってフレンドリー URLを使ったURLを得られます。
また
def should_generate_new_friendly_id?
によって名前が新しくなるたびに、新たなFriendly URLをが作られます。
古いフレンドリーURLはfriendly_id_slugsテーブルに記録され、IDベースでのURLや古いフレンドリーURLへのアクセスは、新しいFriendly URLに301リダイレクトします。
導入後、実際に検索からのユーザーが増えました。
是非試してみて下さい。