0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ActiveHashまとめ

Last updated at Posted at 2021-03-29

  

そもそもActiveHashとは

ActiveHashは都道府県など、テーブルを作るほど価値はないけどHTMLに直接書くのはちょっと・・・
みたいな情報をModelファイルに直接記述して、データーベースにテーブルを作ったときと同じように
扱えるGemです。
  

導入方法

まずはGemをインストールしましょう。

Gemfile
gem 'active_hash'
% bundle install

モデルファイルを作る

ActiveHashではapp/modelsディレクトリの中にmodelファイルを作成するのですが
通常のrails g modelコマンドは使いません。

Image from Gyazo

どうしてかというとActiveHashでは通常のModelのようにApplicationRecordを継承せず
ActiveHash::Baseを継承するからです。
余計なファイルを作成しないためにも、直接modelsディレクトリにファイルを作成しましょう。

そして作成したファイルには

prefecture.rb
class Prefecture < ApplicationRecord
end

ではなく

prefecture.rb
class Prefecture < ActiveHash::Base
end

と記述します。

  

モデルファイルに情報を記述する

・ActiveHashの定義方法

モデルファイル
class モデルクラス名 < ActiveHash::Base
  self.data = [
      {カラム名: , カラム名: }
  ]
end

self.dataの中に配列を作り、ハッシュを入れてデータを入れます。

都道府県のデータを入れてみると、

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

と","で区切って{id: 1, name: '北海道'}, {id:2, name: '青森県'}と情報を入れていきます。


### ・3つ以上のデータ登録 基本はidとnameで記述することが多いかと思いますが 国名などでアルファベットとカナを入力したいという場合もあると思います。 その場合はテーブルにカラムを追加するイメージで
country.rb
class Country < ActiveHash::Base
  self.data = [
    { id: 1,  name: 'ーー', name_kana: 'ーー'},
    { id: 2,  name: 'France', name_kana: 'フランス'},
    { id: 3,  name: 'Italy', name_kana: 'イタリア'},
    { id: 4,  name: 'German', name_kana: 'ドイツ'},
    { id: 5,  name: 'Spain', name_kana: 'スペイン'},
    { id: 6,  name: 'Portugal', name_kana: 'ポルトガル'},
    { id: 7,  name: 'New Zealand', name_kana: 'ニュージーランド'},
    { id: 8,  name: 'Australia', name_kana: 'オーストラリア'},
    { id: 9,  name: 'Chile', name_kana: 'チリ'},
    { id: 10,  name: 'Argentina', name_kana: 'アルゼンチン'},
    { id: 11,  name: 'Japan', name_kana: '日本'}

  ]
end

と、ハッシュの中で","で区切ってあげると増やすことができます。

・マイグレーションファイルに記述する

マイグレーションファイルにはinteger型で登録します。

202103150321_create_qiita.rb
class CreateQiitas < ActiveRecord::Migration[6.0]
  def change
    create_table :wines do |t|
      t.string  :name,           null: false
      t.string  :name_kana,      null: false
      t.integer :country_id,     null: false
      t.timestamps
    end
  end
end

追加で登録する場合は

2021049193123_add_column_to_qiita.rb
class AddColumnToWines < ActiveRecord::Migration[6.0]
  def change
    add_column :qiitas, :country_id, :integer
  end
end

で登録します。
  

アソシエーションを組む

アソシエーションは通常のモデルファイルとは異なり、アソシエーションを組む側だけに記述するだけで大丈夫です。

wine.rb
extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to_active_hash :country

と記述します。

アソシエーションを組むことにより、
通常のモデルと同じように情報を取り出すことができます。

index.html
@wines.each do |wine|
 <%= wine.country.name_kana>
end

またformタグでは

<%= form.collection_select(:country_id, Country.all, :id, :name_kana,{include_blank: "---"} ) %>

と記述するとcounty.rbのカナで登録された情報がセレクトボックスで表示することができます。


まとめ

変更することが考えられるのであれば、通常のテーブルを作成。
固定の内容であればActive Hashのモデルの中にさまざまな情報(数字だったり)を入れていくと便利でいいかなと思います。

0
3
2

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
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?