🔥

Railsのハッシュマップの使い方

2024/08/04に公開

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