active_hash
- 使いどき:変更や削除がないデータの実装はテーブルは作成せず、モデルに直接書く active_hashを使う。
- データの取得方法:通常テーブルからのデータ取得と同様に扱える。
参考: https://github.com/zilkey/active_hash
※ 更に単純なものは、enumでもok。
実装の手順
gemの導入 → bundle install
Gemfile
gem 'active_hash'
モデルの作成
$ rails g model モデル名
{id: 1, name: 'データ1'}
が1つのレコードのイメージ。
モデル
class モデル名 < ActiveHash::Base
self.data = [
{id: 1, name: 'データ1'},
{id: 2, name: 'データ2'},
:
]
end
activehashを外部キーに設定する
(例) Itemテーブルの外部キーにsizeモデル(activehash)のidを保存したい場合
テーブルに外部キー用のカラム追加
rails g migration AddColmunToItems
でマイグレーションファイルを作成し、実行すれば、ok。
※ activehashは、reference型ではマイグレーションエラーになるので注意!
migrate
class AddColmunToItems < ActiveRecord::Migration[5.0]
def change
add_column :items, :size_id, :integer, null: false
end
end
アソシエーション
- Itemモデルに記載。
- sizeモデルには不要。
Item.rb
class Item < ApplicationRecord
extend ActiveHash::Associations::ActiveRecordExtensions
belongs_to_active_hash :size
end
active_hashによく使うメソッド
メソッド | 役割 |
---|---|
モデル名.all | 全データ取得 |
モデル名.first | 最初のデータ取得 |
モデル名.last | 最後のデータ取得 |
モデル名.find(1) | id=1の最初のデータ取得 |
モデル名.find_by_name("データ2") | name=データ2 の最初のデータ取得 |
モデル名.where(name: "データ2") | name=データ2 の全データ取得 |
モデル名.count | レコードの数を取得 |
※ 詳細は https://github.com/zilkey/active_hash を参照。 |