1
2

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-09-01

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

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

環境

ruby 2.5
rails 5.2.4.3
devise 4.7.2
active_hash 3.1.0

参考

zilkey/active_hash:
collection_select

ちょっとしたデータの格納に使います。

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

簡単導入

gemに

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 多 ←→ 1 prefecture

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

migrationを変更 このあたりから情報が、、、

該当のmigrationFileを編集
今回は

migrate/*****_create_addresses.rb
t.integer :prefecture_id,        null: false, default: nil

null〜はお好みで♪
書き換えたら、いつもの rails db:migrate ね
strong params も書き換えてね^^
多分registrations_controller.rb
の:prefectureの部分だけです。
:prefecture_idにしました。

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がやっかいでした。

= f.collection_select :prefecture_id,Prefecture.all,:id,:name,{prompt:"--"},{class:"inputDefault"}

これでこう↓なります。

<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="47">福岡県</option></select>

※ポイント 先頭データ↓がないとclass読み込みません!

= f.collection_select :カラム名,登録するデータ,表示するデータ,先頭データ(selectedもここ),今回はclass

多分以上で終了です。
migrationのカラムをt.string :prefecture から上記に変更する発想がなく、一生懸命、collection_select の登録データを:nameにする努力をしてた^^;
あっという間の数時間TT

1
2
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
1
2