🔥
Railsのハッシュマップの使い方
Railsのハッシュマップとは
Rubyのハッシュ(Hash)と同じ機能を持つデータ構造のことで、Rubyのハッシュはキーと値のペアを保持するデータ構造なので、Railsではこれを様々な使い方をします。
ハッシュマップの使い道
調べてみたら以下のことが出てきました。
-
データのマッピング
キーと値のペアでデータを関連付け -
データのアクセス
キーを使って値を素早く取得 -
ビューへのデータ渡し
コントローラーからビューへデータを渡す際に使用 -
一時的なデータ格納
データベースから取得したデータを一時的に保持 -
国際化(i18n)
特定のキーに対してロケールに応じたテキストを提供
decoratorで使用
今回はRailsのdecoratorで使用した例です。以下はプログラミングスクールのプランタイプを例に出します。
app/decorators/admins/reservation_decorator.rb
class Admins::ReservationDecorator < ApplicationDecorator
delegate_all
def display_plan_type
case plan_type
when 'bootcamp'
'ブートキャンプ'
when 'part_time'
'パートタイム'
when 'workshop'
'ワークショップ'
when 'free_trial'
'無料体験'
else
'不明'
end
end
end
ハッシュマップに変えたら以下のようになりました。
# PLAN_TYPE_LABELSは、各プランタイプに対応するユーザーフレンドリーなラベルを提供
# 新しいプランタイプを追加する場合は、ここに追加
class Admins::ReservationDecorator < ApplicationDecorator
delegate_all
# 新しいプランタイプを追加する際の変更を容易にするために以下のようなハッシュマップを使用しました。
PLAN_TYPE_LABELS = {
'bootcamp' => 'ブートキャンプ',
'part_time' => 'パートタイム',
'workshop' => 'ワークショップ',
'free_trial' => '無料体験'
}.freeze
# plan_typeに基づいて対応するラベルを返します。
def display_plan_type
PLAN_TYPE_LABELS[plan_type] || '不明'
end
end
controller
コントローラーでの使用例も書いておきます。
def show
@user = User.find(params[:id])
@user_details = {
name: @user.name,
email: @user.email,
joined: @user.created_at.strftime("%Y/%m/%d")
}
end
Rubyのハッシュの特性は以下のようになるみたいです。
-
キーと値のペアを持つ
{ key1 => value1, key2 => value2 } -
キーを使ったアクセス
hash[:key1]でvalue1を取得。
Railsのコードベースでハッシュマップを見かけた場合、そのハッシュマップは通常、
RubyのHashクラスのインスタンスとして実装されるみたいです。
これにより、いろんなデータの管理や操作が効率的に行えます。
参考
ChatGPT
CodeRabbit参照
Discussion