2
4

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.

【Rails】初めてのactive_hash

Last updated at Posted at 2020-04-28

active_hash

  • 使いどき:変更や削除がないデータの実装はテーブルは作成せず、モデルに直接書く active_hashを使う。
  • データの取得方法:通常テーブルからのデータ取得と同様に扱える。

参考: https://github.com/zilkey/active_hash
※ 更に単純なものは、enumでもok。

実装の手順

gemの導入 → bundle install

Gemfile
gem 'active_hash'

モデルの作成

$ rails g model モデル名

{id: 1, name: 'データ1'}が1つのレコードのイメージ。

モデル
class モデル名 < ActiveHash::Base
  self.data = [
    {id: 1, name: 'データ1'}, 
    {id: 2, name: 'データ2'}, 
          :
  ]
end

activehashを外部キーに設定する

(例) Itemテーブルの外部キーにsizeモデル(activehash)のidを保存したい場合

テーブルに外部キー用のカラム追加

rails g migration AddColmunToItemsでマイグレーションファイルを作成し、実行すれば、ok。
activehashは、reference型ではマイグレーションエラーになるので注意!

migrate
class AddColmunToItems < ActiveRecord::Migration[5.0]
  def change
    add_column :items, :size_id, :integer, null: false
  end
end

アソシエーション

  • Itemモデルに記載。
  • sizeモデルには不要。
Item.rb
class Item < ApplicationRecord
  extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to_active_hash :size
end

active_hashによく使うメソッド

メソッド 役割
モデル名.all 全データ取得
モデル名.first 最初のデータ取得
モデル名.last 最後のデータ取得
モデル名.find(1) id=1の最初のデータ取得
モデル名.find_by_name("データ2") name=データ2 の最初のデータ取得
モデル名.where(name: "データ2") name=データ2 の全データ取得
モデル名.count レコードの数を取得
※ 詳細は https://github.com/zilkey/active_hash を参照。
2
4
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
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?