QA@IT

Friendly_id で url に日本語及びUnicodeの文字をそのまま使う

1536 PV

WikipediaのようにURLに日本語がある時はUTF8での表示をRailsで行いたいのですが日本語が入力された時にFriendly_idのUUIDが表示されてしまいます。

空白は - に変えたいので、モデル内で

  extend FriendlyId
  friendly_id :name, use: :slugged

  (略)

  def normalize_friendly_id(string)
    string.gsub(/\s+/,"-")
  end  

と記述したのですが、日本語を使うと空白になってしまうようでUUIDがslugになってしまいます。
どう記述すれば日本語をそのままURLに使用することができるのでしょうか?

回答

https://github.com/norman/friendly_id/blob/master/README.md#rails-quickstart に従ってモデル等作成後、例に挙げられた normalize_friendly_id を実装して試したところ、期待通り日本語の文字列を含む URL が生成されました。

ただし、上記チュートリアルのままでは、英字の場合でも slug が空文字になってしまうので、下記の箇所のみ書き換えました。

# app/controllers/users_controller.rb
  def user_params
-   params.require(:user).permit(:name, :slug)
+   params.require(:user).permit(:name)
  end

英字のみで slug が生成されるか、rails console で最低限の attribute だけを指定してモデルを作成した場合にどうなるかなど調査してみてはいかがでしょうか?

なお、下記の環境で確認しました。

  • ruby 2.1.0-p0
  • Rails 4.0.2
  • friendly_id 5.0.2
編集 履歴 (0)
  • ありがとうございます。原因は情けない理由なのですが user_group という別のモデルの方を見てしまっていました。ご指摘の通り rails console で作業をしてて間違いに気づきました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。