LoginSignup
2
0

More than 3 years have passed since last update.

Rails6 のちょい足しな新機能を試す84(parameterize編)

Posted at

はじめに

Rails 6 に追加された新機能を試す第84段。 今回は、 parameterize 編です。
Rails 6 では、 parameterizelocale オプションを指定できるようになりました。

Ruby 2.6.4, Rails 6.0.0 で確認しました。

$ rails --version
Rails 6.0.0

今回は、name (名前) 属性をもつUser の CRUD を作成し、 URL を parameterize を使って変更することで動作確認します。

プロジェクトを作る

rails new rails_sandbox
cd rails_sandbox

User の CRUD を作る

name の属性をもつ User のCRUDを作ります。

bin/rails g scaffold User name

Userモデルに to_param メソッドを追加する

User モデルで、 to_param メソッドを追加します。このメソッド内で locale オプションつきの parameterize メソッドを使います。

app/models/user.rb
class User < ApplicationRecord
  def to_param
    "#{id}-#{name.parameterize(locale: :de)}"
  end
end

config/application.rb を修正する

ドイツ語環境を整えるのが面倒なので、 I18n::InvalidLocale を避けるために、 config/application.rb を編集します。

config/application.rb
...
I18n.enforce_available_locales = false

ドイツ語用のロケールファイルを作成する

ドイツ語の変換ルールの locale ファイルを用意します。

config/locales/de.yml
de:
  i18n:
    transliterate:
      rule:
        Ä: AE
        ä: ae
        Ö: OE
        ö: oe
        Ü: UE
        ü: ue
        ß: SS

マイグレーションを実行する

$ bin/rails db:create db:migrate

画面からユーザーを登録する

bin/rails s を実行し、 http://localhost:3000/users/new にアクセスしてユーザーを登録します。

name には、 Jürgen と入力します。 [Create User] ボタンを押します。

user_new.png

詳細画面のURLは、 http://localhost:3000/users/1-juergen と変換されていることがわかります。
(Jürgenjuergen と変換される。)

user_show.png

locale を指定しなかった場合

今回の場合、 locale オプションを指定しなかった場合

つまり、

app/models/user.rb
class User < ApplicationRecord
  def to_param
    "#{id}-#{name.parameterize}"
  end
end

とした場合、URLは、 locale オプションは、nil になり、 I18n.locale が使われます。
今回は、 I18n.locale をデフォルトから変更していないため、 I18n.localeen になるため、 URLは、 http://localhost:3000/users/1-jurgen となります。
(Jürgenjurgen と変換される。)

試したソース

試したソースは以下にあります。
https://github.com/suketa/rails_sandbox/tree/try084_parameterize_locale

参考情報

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0