LoginSignup
4
1

More than 3 years have passed since last update.

ActiveHashで複数のプルダウンメニューを作る方法

Posted at

【概要】

1.結論

2.ActiveHashとは何か

3.どのように使用するのか

4.補足

1.結論

モデルを複数作って、db/migrateに全て記載する!


2.ActiveHashとは何か

ActiveHashとは変更されないデータをモデルファイルに書き込むことでDBに逐一保存せずにデータを扱えるgemです!


3.どのように使用するのか

ActiveHashの導入方法は他のgemと一緒なので省きます!
また自分が反映させたいテーブルも用意しておきます。

コンソール
%rails g model abcdefghi --skip-migration

と記載します!
スキップするのはDBにマイグレーションする必要(テーブルを作成)がないからです!

そうすると

model
 class Abcdefghi <ApplicationRecord

となっているので、
ApplicationRecord を ActiveHash::Base に書き換えましょう!ActiveHash::Baseに継承することでApplicationRecordのメソッドも使用できます!(ActiveHash::BaseはApplicationRecordの同様のメソッドが使用できます)

model
 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.の最初から繰り返します!

db/migrate/20******
 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のテーブルのような構造になっているのでアソシエーションの記載が必要です。

models/****.rb
class (該当のテーブル名)  < ApplicationRecord
  extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to_active_hash :abcdeghi
end

としてください!


4.補足

model/****.rb
class ****(該当のテーブル名)< ApplicationRecord
validates :abcdefghi_id, numericality: { other_than: 1 }

と記載することで、 ” { id: 1, name: '--' }”
”--”以外は保存できますというバリデーションが記載できます!
id:1よりも上の数字は反映されるという意味だからですね!


4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1