ActiveHashを解説してみた


ActiveHash

職業選択などの変更されないデータをモデルファイル内に直接記述することで、データベースへ保存せずにデータを取り扱うことができる。つまり、Active_Hashを用いることで、モデルファイルに直接記述した変更されないデータに対して、ActiveRecordのメソッドを用いることができる。

導入方法

Gemfile
qiita.rb
gem 'active_hash'

記述したらbundle installを実行する。

モデル作成時に押さえておくべきこと

結論、--skip-migrationを使用すること。
理由は、データベースを作らない。すなわちマイグレーションファイルは不要となるからだ。ここでrails g modelコマンドを使用してしまうと、マイグレーションファイルも同時に作成されてしまうので注意が必要。

% rails g model モデル名 --skip-migration

ActiveHash::Base

ActiveRecordと同様のメソッドが使用できる。
つまり、ActiveHash::Baseを継承することで、モデルに定義したオブジェクトに対してActiveRecordのメソッドが使用できるようになる。

qiita.rb
class ShippingFee < ActiveHash::Base
  self.data = [
    { id: 0, name: '---' },
    { id: 1, name: '着払い(購入者負担)' }, { id: 2, name: '送料込み(出品者負担)' }
  ]
end

self.dataでテーブルを作成しているイメージ。データは配列にハッシュ形式で格納されている。

belongs_to_active_hash

通常であればbelongs_to :モデル名となるが、ActiveHashを使って作成したモデルに対してアソシエーションを設定する場合は、belongs_to_active_hashメソッドを使用する。

collection_select

データをプルダウン形式で表示することができるメソッド

記述順 詳細 具体例
第一引数 メソッド名 カラム名
第二引数 オブジェクト 配列データの指定
第三引数 id 参照DBのカラム名
第四引数 name 実際のカラム名
第五引数 prompt プルダウンで一番上に表示したい内容
オプション クラス名 --
qiita.rb
<%= f.collection_select(:shipping_fee_id, Shipping_fee.all, :id, :name, {}, {class:"select-box", id:"item-shipping-fee-status"}) %>

実装例

代表的なものをいくつかあげてみた
・都道府県
・職業選択
・クローズドクエスチョン(yes or noで答えられるようなもの)
・アンケート
・カテゴリー
・商品のステータス

個人的にはこれがあることで利用者側のストレスを大幅に減らすことができ、かつ効率的に情報収集をすることができると感じた。
相手に意見を求めたいときなどに使うといいかもしれない。

最後に

ここまで記事を読んでいただき、ありがとうございました。

普段何気なく使っているものにもActiveHashが取り入れられているのですね。
実装も簡単なので、積極的に使っていきたいと感じました。

今後も学習を進めていく中で、役立つ情報をどんどん発信していきたいと思うので、よろしくお願いします。

ここまで記事を読んでいただき、本当にありがとうございました‼