5
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.

enumをセレクトボックスで扱う方法

Posted at

背景

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の文字列を設定するときにエラーが起きる例として、半角と全角(もしくは日本語と英語?)を混ぜ合わせた文字列はエラーになるので気をつけてください!

5
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
5
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?