#はじめに
Railsでオリジナルアプリを制作しています。このアプリにActiveHashを適用しました。プルダウン形式でActiveHashで設定したデータを選択できるようにしました。忘れても思い出せるよう書き残します。
※ActiveHashは都道府県名一覧のように変更されないデータを扱います。変更されないデータなので、データベースには直接保存する必要がないです(都道府県毎に用意したidは保存されます)。
開発環境
ruby 2.6.5
Rails 6.0.3.4
#目次
1.ActiveHashの導入
2.モデルの準備
3.コントローラーの準備
4.ビューの表示
#1.ActiveHashの導入
ActiveHashはGemの1つ。Gemファイルに追記し、ターミナルでインストールする。
gem 'active_hash'
bundle install
#2.モデルの準備
ここではday(日数)をActiveHashの対象とする。モデル作成時--skip-migrationを追加するとマイグレーションファイルは作成されない。他にもActiveHashの対象があるなら、その数だけモデルを作成する。
rails g model day --skip-migration
モデル内ではActiveHashを継承するすること。self.dataはハッシュ形式のデータが格納された配列になる。ハッシュ内はidとname(日数)が紐づく。
class day < ActiveHash::Base #←ActiveHashを継承する
self.data = [
{ id: 1, name: '--' },
{ id: 2, name: '1日' },
{ id: 3, name: '1週間' },
]
end
続いて上記で設定した日数のidをデータベースに保存する設定を行う。ActiveHashが紐づくテーブルとしてarticleを例にする。
class CreateArticles < ActiveRecord::Migration[6.0]
def change
create_table :articles do |t|
t.string :title , null: false
t.text :text , null: false
t.integer :day_id , null: false #ActiveHashのidが保存されるカラム
t.timestamps
end
end
end
忘れずマイグレーションを行う。モデルのアソシエーションも。
validates :day_id # _idをつける
belongs_to_active_hash :day # _idは不要
#3.コントローラーの準備
ストロングパラメータにday_idを追加して、保存できるようにする。
例:
def new
@article = Article.new
end
def create
@article = Article.new(article_params)
end
private
def article_params
params.require(:article).permit(:title, :text, :day_id)
end
#ビューの表示
collection_selectによってプルダウン形式で表示できる。引数は第一から第五まである。
| 引数 | 値 |
|:-:|:-:|:-:|
| 第一引数(保存されるカラム ) | day_id |
| 第二引数(オブジェクトの配列) | Day.all |
| 第三引数(カラムに保存される項目) | id |
| 第四引数(選択肢に表示されるカラム名) | name |
| 第五引数(オプション) | {} |
| htmlオプション | {class:"day-select"} |
<%= f.collection_select(:day_id, Day.all, :id, :name, {}, {class:"day-select"}) %>
以上