【概要】
1.結論
2.ActiveHashとは何か
3.どのように使用するのか
4.補足
1.結論
モデルを複数作って、db/migrateに全て記載する!
2.ActiveHashとは何か ---------------------------------------- ActiveHashとは変更されないデータをモデルファイルに書き込むことでDBに逐一保存せずにデータを扱えるgemです!
3.どのように使用するのか --------------------------------------- ActiveHashの導入方法は他のgemと一緒なので省きます! また自分が反映させたいテーブルも用意しておきます。
%rails g model abcdefghi --skip-migration
と記載します!
スキップするのはDBにマイグレーションする必要(テーブルを作成)がないからです!
そうすると
class Abcdefghi <ApplicationRecord
となっているので、
ApplicationRecord を ActiveHash::Base に書き換えましょう!ActiveHash::Baseに継承することでApplicationRecordのメソッドも使用できます!(ActiveHash::BaseはApplicationRecordの同様のメソッドが使用できます)
class Abcdefghi <ActiveHash::Base
self.data = [
{ id: 1, name: '--' },
{ id: 2, name: 'A' },
{ id: 3, name: 'B' },
{ id: 4, name: 'C' },
{ id: 5, name: 'D' },
{ id: 6, name: 'E' },
{ id: 7, name: 'F' },
{ id: 8, name: 'G' },
{ id: 9, name: 'H' },
{ id: 10, name: 'I' }
]
self.dataでテーブルを作成している感覚で、配列型式でハッシュの使い記載します。データーベースからモデルに引っ張ってくる中身がまさにこのような形ですね。
” { id: 1, name: '--' }”は表示の際によく見るものですね。
これをプルダウンメニューを作りたい分だけ3.の最初から繰り返します!
class Create****(該当のテーブル名) <ActiveRecord::Migration[6.0]
def change
create_table :*****(該当のテーブル名) do |t|
t.integer :abcdeghi_id , null: false
t.timestamps
end
end
end
とします!
_idとするのはモデルのidを自分の保存したいテーブル持っていくためです。
あとはいつもどおり
% rails db:migrate
すればOKです!
ただここで気をつけておきたいのが、
アソシエーションです。一応 class Abcdefghi <ActiveHash::Baseの部分でDBのテーブルのような構造になっているのでアソシエーションの記載が必要です。
class (該当のテーブル名) < ApplicationRecord
extend ActiveHash::Associations::ActiveRecordExtensions
belongs_to_active_hash :abcdeghi
end
としてください!
4.補足 ----------------------------------------
class ****(該当のテーブル名)< ApplicationRecord
validates :abcdefghi_id, numericality: { other_than: 1 }
と記載することで、 ” { id: 1, name: '--' }”
”--”以外は保存できますというバリデーションが記載できます!
id:1よりも上の数字は反映されるという意味だからですね!