背景
enumの値をセレクトボックスで使いたくて調べていたが、どれも難しく書いてあり分かりにくかったので自分なりにまとめてみました!
enumとは
こちらの記事を参照ください!
https://qiita.com/ren0826jam/items/2870486578dc530c7074
##手順
1.マイグレーションファイルを作成する。
※今回はProductモデルの以下のカラムのデータをenumを活用して保存します。
20××××××××××.rb
class CreateProducts < ActiveRecord::Migration[5.2]
def change
create_table :products do |t|
省略
t.integer :status, null: false
t.integer :bear, null: false
t.integer :days, null: false
省略
end
end
end
2.enumの設定を記述する。
model/product.rb
enum status: { 新品・未使用: 0, 未使用に近い: 1, 目立った傷や汚れなし: 2, やや傷や汚れあり: 3, 傷や汚れあり: 4, 全体的に状態が悪い: 5 }
enum bear: { 送料込み(出品者負担): 0, 着払い(購入者負担): 1}
enum days: { 1〜2日で発送: 0, 2〜3日で発送: 1, 4〜7日で発送: 2}
end
3.ビューにセレクトボックスの記述をする。
new.html.haml
//省略
.new_page_status
%span.label_title
商品の状態
%span.required 必須
%p
= form.select :status, Product.statuses.keys //enumのデータを表示
%span.item__show--block
配送について
%i.far.fa-question-circle
.new_page_bear
%span.label_title
配送料の負担
%span.required 必須
%p
= form.select :bear, Product.bears.keys //enumのデータを表示
.new_page_days
%span.label_title
発送までの日数
%span.required 必須
%p
= form.select :days, Product.days.keys //enumのデータを表示
//省略
これで実装完了です。
日本語で表示するときに、ja.ymlなどに設定するやり方もありましたがこのやり方の方が効率良く実装出来ます!
それと、なぜかenumの文字列を設定するときにエラーが起きる例として、半角と全角(もしくは日本語と英語?)を混ぜ合わせた文字列はエラーになるので気をつけてください!