テーブルを使用するがデータが決まっている場合、データベースにデータを保存せずにテーブルを使用するActive Hashの使用をします。
例えば性別の場合、男性・女性・その他の3通りのため、テーブルでデータを作成する必要がありません。
Active Hash導入
active_hashのgemを導入します。
gem 'active_hash'
bundle install
Active Hash用のテーブル作成
今回性別(gender)テーブルを作成します。
Active Hashの場合、データベースに保存するために必要なマイグレーションファイルが不要なため、--skip-migrationを追記します。
rails g model gender --skip-migration
コマンド入力後、以下のファイルが作成されます。
このファイルに、カラムやレコードを手動で設定します。
app/models/gender.rb
モデルの設定
先ほど作成したファイルより、モデルの設定をします。
継承先設定
genderモデルにActiveHash::Baseを継承し、
ActiveRecordと同じようなメソッドを使用できるようにします。
変更前
```ruby:app/models/gender.rb class SleepTime < ApplicationRecord end ```変更後
```ruby:app/models/gender.rb class SleepTime < ActiveHash::Base end ```カラムとレコード設定
genderモデルで使用するカラムとレコードを設定します。
class Gender < ActiveHash::Base
self.data = [
{ id: 1, type: '男性' },
{ id: 2, type: '女性' },
{ id: 3, type: 'その他' }
]
end
コントローラーからビューに引継ぎして表示
genderテーブルのデータをコントローラーで取得し、ビューに引継ぎさせます。
※今回はtestコントローラー→ビューで使用します。
class TestsController < ApplicationController
def index
# genderテーブルの全データ取得
@genders = Gender.all
# genderテーブルの指定カラムのみ取得(今回はtypeカラムのみ取得)
@genders_type = Gender.pluck(:type)
end
end
Allメソッドで取得したデータをビューで表示する時、
Active Hashでは「all_records」メソッドを使用しないといけないため注意
# allメソッドで取得したデータの1配列目のtypeデータ
<%= @genders.all_records[1].type %>
=> 男性
<%= @genders_type[2] %>
=> 女性