0
0

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]ActiveHash変更されないデータをDBに保存せず取り扱う

Last updated at Posted at 2021-07-01

はじめに

プログラミング初心者が、学習の過程で学んだことを整理してまとめたものです。

ActiveHashとは

基本的に変更されないデータを、モデルファイル内に直接記述することで、データベースに保存せずに、データを取り扱えることができるGemのことです。例えば、都道府県やカテゴリーやジャンルなどを指します。

#使用の仕方

1.ActiveHashを用いたいモデルファイルを作成します。
 app/modelsデレクトリの直下にファイルを作成します。   〇〇.rb

2.そのモデルファイルで、クラス定義とActiveHash::Baseクラスの継承をします。

:Base

この記載をすることでAvtiveRecordのようなメソッドが使用できるようになります。

3.モデルファイル内にデータの記述します。
    データは配列にハッシュで格納します。   

 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: '未定'}
     ]
     end
 ```   
4.このモデルファイルを読込みたい、テーブルにカラムの追加をする。
    テーブルの中で、作成したモデル(ActiveHash)の外部キーとして管理することで、テーブル内のデーターに対してActiveHashのデータが紐付きます。

5.作成したモデルのアソシエーションを設定する。
   ActiveHasを用いて、belongs_toを設定するには、読込みたいモデルファイル内で、下記の記述をします。
```extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to :作成したモデル名(Active Hashのほう)

6.作成したモデルファイル内でもアソシエーションを設定する。(複数のデータに対して)
  データ配列の下に記述します。

:Associations
has_many :読み込みたい方のモデル名(複数形)

7.バリデーションを設定設定します。
ActiveHashではid:1の記載はデフォルトの'--'になっているため、こちらは使用されないようにします。

テーブルのカラム名, numericality: { other_than: 1 }

*カラム名の1は保存できないと記述です。

8.ビューファイルで呼び出します。
form_withの中にcollection_selectを用いて記述します。これによってプルダウン形式で表示することが出来ます。
 ```  <%= form_with model: @インスタンス変数, local: true do |f| %>
 <%= f.text_field :title, class:"title", placeholder:"タイトル" %>
 <%= f.collection_select(:〇〇_id, 〇〇.all, :id, :name, {}, {class:"select"}) %>

*()の中は、(保存されるカラム名,オブジェクトの配列,カラムに保存される項目,選択肢に表示されるカラム名,オプション,HTMLオプション)の順で記述する。


以上でActiveHashを用いる方法です。
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?