はじめに
Active_Hashとは、都道府県名やカテゴリー選択などの変更されないデータをモデルファイル内に直接記述することで、データベースへ保存せずにデータを取り扱うことができるgemです。
Active_Hashを用いることで、モデルファイルに直接記述した変更されないデータに対して、ActiveRecordのメソッドを用いることができます。
目次
1.Active Hashのインストール
2.モデルの作成
3.マイグレーションファイルの編集
4.アソシエーションの設定
5.ビューファイルの編集
1. Active Hashのインストール
gemfileに以下を記述します。
その後、コマンドでbundle installを実行します。
gem 'active_hash'
2. モデルの作成
今回はPostモデルとCategoryモデルを作成します。
Postモデルはいつも通りに作成します。
ターミナル
rails g model post
Categoryモデルを作成する際は、「--skip-migration」オプションを使用します。
「--skip-migration」を使用することで、マイグレーションファイルの生成を行わないようにします。
今回、カテゴリーを情報をデータベースには保存をしないのでマイグレーションファイルを作成しません。
ターミナル
rails g model category --skip-migration
category.rbでCategoryクラスを定義し、ActiveHash::Baseクラスを継承します。
ActiveHash::Baseを継承することで、Categoryモデルに定義したオブジェクトに対してActiveRecordのメソッドが使用できるようになります。
class Category < ActiveHash::Base
self.data = [
{ id: 1, name: '---' },
{ id: 2, name: '化粧水' },
{ id: 3, name: '乳液' },
{ id: 4, name: 'オールインワン' },
{ id: 5, name: 'クレンジング' },
{ id: 6, name: '洗顔料' },
{ id: 7, name: '日焼け止め' },
{ id: 8, name: 'リップ' },
{ id: 9, name: '香水' },
{ id: 10, name: 'ヘアカラー' },
{ id: 11, name: 'ヘアスタイリング' },
{ id: 12, name: 'シャンプー・コンディショナー' },
{ id: 13, name: 'コンタクトレンズ' }
]
end
データは配列にハッシュの形で格納しています。
3. マイグレーションファイルの編集
postsテーブルにはcategory_idカラムを作成します。
_idになっているのはidに紐づいているカテゴリーを取得し、カテゴリーのidをpostsテーブルに保存するからです。
カラム型はinteger型にします。
~略~
t.integer :category_id, null: false
~略~
4. アソシエーションの設定
ActiveHashにはbelongs_to_active_hashメソッドが用意されています。
ActiveHashを使って作成したモデルに対してアソシエーションを設定する場合は、belongs_to_active_hashメソッドを使います。
ActiveHash::Associations::ActiveRecordExtensionsを記述することで、belongs_to_active_hashメソッドを使用できます。
class Post < ApplicationRecord
extend ActiveHash::Associations::ActiveRecordExtensions
belongs_to_active_hash :category
end
5. ビューファイルの編集
今回はデータをプルダウン形式で表示しました。
ですので、collection_selectメソッド使って表示します。
<%= form.collection_select(保存されるカラム名, オブジェクトの配列, カラムに保存される項目(表示する際に参照するDBのカラム名), 選択肢に表示されるカラム名, オプション, htmlオプション(classなど)) %>
例
<%= f.collection_select(:category_id, Category.all, :id, :name, {}, {class:”category-select"}) %>
参考リンク