gem active_hash アクティブハッシュについて

昨晩やったとこさ
アクティブハッシュの導入がうまく言ったので
覚書でーす

というか
一次ソースからmigrationの記述を見つけられず焦った、、、

## 環境
ruby 2.5
rails 5.2.4.3
devise 4.7.2
active_hash 3.1.0

## 参考
[zilkey/active_hash:](https://github.com/zilkey/active_hash)
[collection_select](https://railsdoc.com/page/collection_select)

## ちょっとしたデータの格納に使います。
都道府県のデータ選択など一つのアプリで何箇所か使いたい、
でもDB使うまででもない。
うーん、、、
ってときにおすすめです。
カテゴリでも使えるのかな？？
↑カテゴリーはancestryというgemでした。
https://github.com/stefankroes/ancestry

## 簡単導入
gemに

```ruby:Gemfile
gem 'active_hash'
```
いつもの

```ターミナル
bundle install
```

## model追加 ここまでは簡単だったOTZ
☓　rails g model モデル名　←しません。
今回は都道府県のデータなので

```models/prefecture.rb
class Prefecture < ActiveHash::Base
  self.data = [
      {id: 1, name: '北海道'}, {id: 2, name: '青森県'}, {id: 3, name: '岩手県'},
      {id: 4, name: '宮城県'}, {id: 5, name: '秋田県'}, {id: 6, name: '山形県'},
      {id: 7, name: '福島県'}, {id: 8, name: '茨城県'}, {id: 9, name: '栃木県'},
      {id: 10, name: '群馬県'}, {id: 11, name: '埼玉県'}, {id: 12, name: '千葉県'},
      {id: 13, name: '東京都'}, {id: 14, name: '神奈川県'}, {id: 15, name: '新潟県'},
      {id: 16, name: '富山県'}, {id: 17, name: '石川県'}, {id: 18, name: '福井県'},
      {id: 19, name: '山梨県'}, {id: 20, name: '長野県'}, {id: 21, name: '岐阜県'},
      {id: 22, name: '静岡県'}, {id: 23, name: '愛知県'}, {id: 24, name: '三重県'},
      {id: 25, name: '滋賀県'}, {id: 26, name: '京都府'}, {id: 27, name: '大阪府'},
      {id: 28, name: '兵庫県'}, {id: 29, name: '奈良県'}, {id: 30, name: '和歌山県'},
      {id: 31, name: '鳥取県'}, {id: 32, name: '島根県'}, {id: 33, name: '岡山県'},
      {id: 34, name: '広島県'}, {id: 35, name: '山口県'}, {id: 36, name: '徳島県'},
      {id: 37, name: '香川県'}, {id: 38, name: '愛媛県'}, {id: 39, name: '高知県'},
      {id: 40, name: '福岡県'}, {id: 41, name: '佐賀県'}, {id: 42, name: '長崎県'},
      {id: 43, name: '熊本県'}, {id: 44, name: '大分県'}, {id: 45, name: '宮崎県'},
      {id: 46, name: '鹿児島県'}, {id: 47, name: '沖縄県'}
  ]
end
```
※ポイント　先頭はデータにしといたが吉　「選択してください」とかはあんませんほうがよい。気がする。class使いたいから。

## model 追記 一次ソースの基本の通り
今回は address model
association　address 多　←→　１ prefecture

```ruby:models/address.rb
  extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to :prefecture
```

## migrationを変更　このあたりから情報が、、、
該当のmigrationFileを編集
今回は

```ruby:migrate/*****_create_addresses.rb
t.integer :prefecture_id,        null: false, default: nil
```
null〜はお好みで♪
書き換えたら、いつもの rails db:migrate ね
strong params も書き換えてね^^
多分registrations_controller.rb
の:prefectureの部分だけです。
:prefecture_idにしました。

```ruby:registrations_controller.rb
  protected

  def address_params
    params.require(:address).permit(
        :family_name_kanji,
        :first_name_kanji,
        :family_name_kana,
        :first_name_kana,
        :post_number,
        :prefecture_id,
        :city,
        :block_number,
        :apartment_name,
        :phone_number,
    )
  end
```

## view 変更
classがやっかいでした。

```ruby
= f.collection_select :prefecture_id,Prefecture.all,:id,:name,{prompt:"--"},{class:"inputDefault"}
```
これでこう↓なります。

```haml
<select class="inputDefault" name="address[prefecture_id]" id="address_prefecture_id"><option value="">--</option>
<option value="">--</option>
<option value="1">北海道</option>
<option value="2">青森県</option>
<option value="3">岩手県</option>
・・・・・
<option value="4７">福岡県</option></select>
```
※ポイント 先頭データ↓がないとclass読み込みません！

```ruby
= f.collection_select :カラム名,登録するデータ,表示するデータ,先頭データ(selectedもここ),今回はclass
```
多分以上で終了です。
migrationのカラムをt.string :prefecture から上記に変更する発想がなく、一生懸命、collection_select の登録データを:nameにする努力をしてた^^;
あっという間の数時間TT