1
0

More than 3 years have passed since last update.

ActiveHashによるカテゴリー選択

Last updated at Posted at 2020-12-02

ActiveHashによるカテゴリー選択

ActiveHashとは

 都道府県名などの変更されないデータをモデルファイル内に直接記述することで、データベースへ保存せずにデータを取り扱うことができるGemです。また、このGemを使うことでデータベースに47の都道府県名のカラムを作ることなくデータを管理することができます。今回は私が作成中のアプリケーションの例で紹介していきます。
 アプリケーションの説明として、収入の分類(給料、ボーナス、副業etc)など決まった選択肢をカテゴリー選択できること目標とします。

公式ページはこちら↓↓↓
https://github.com/zilkey/active_hash

Gemのインストール

開発環境 rails 6.0.0

GemfileGemfileに追記する↓↓↓

gem 'active_hash'

引き続きbundle installを実行します。

モデルの作成

Incomeモデルを作成します。

rails g model income

マイグレレーションを実行します。↓↓↓

class Incomes < ActiveRecord::Migration[6.0]
 def change
   create_table :incomes do |t|
     t.integer    :category_id     , null: false  # 収入分類のカラム
     t.integer    :price        , null: false       # 金額
     t.timestamps
   end
 end
end

この時prefectureにアンダーバーでid[_id]を付ける必要があります。idを外部キーとして管理することでActiveHashに紐付いた収入分類を取得する事ができます。
引き続きActiveHashのモデルを作成します。この時、データベースに新たにテーブルを作成する必要はありません。
またその他のファイルのファイルも必要としません。

class Category < 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: 'その他収入' }
  ]
  # moduleを取り込み↓↓
  include ActiveHash::Associations
  has_many :incomes       # incomeモデルとのアソシエーション
end

次にincomeモデルも編集します。

class Income < ApplicationRecord
  extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to :income_category
  # category_idのid:1以外のときに保存できるバリデーションを設定(1は「--」です。)↓↓
  validates :income_category_id, numericality: { other_than: 1}
end

ビューにカテゴリー選択をプルダウンで表示

ルーティングとコントローラーを編集した後、ビューを編集します。

<%= form_with model: @income, url:incomes_path, local: true do |f| %>
    <%= f.collection_select(:category_id, Category.all, :id, :name, {}, {class:"income-select"}) %>
    <%= f.text_field :text, class:"text", placeholder:"金額" %>
    <%= f.submit "保存する" ,class:"submit" %>
<% end %>

collection_selectとは、データをプルダウン形式で表示させることができるメソッドです。このとき()内は順番に第1引数(保存するカラム名)、第2引数(配列データ)、第3引数(保存される項目、テーブルにはidで保存される)、第4引数(選択肢に表示されるカラム名、ここでは収入区分)、第5引数(オプション)、クラス名となります。

これによって収入区分がプルダウンで選択できます。
このようになります↓↓↓
スクリーンショット 2020-12-02 23.02.05.png

以上です!!!!参考になれば嬉しいです!
また誤り等あればご指摘お願いします。

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