[Ruby on Rails]enumを用いたselectフォームの作成
selectを作る際に、選択肢が3つ程度のものであればoptionで記載しても良いかとは思いますが、多くなればコードが冗長になってしまいます。
enumを用いているカラムに対してであれば、スッキリ綺麗なコードで実装できます。
実装した機能
gyazoリンク
https://gyazo.com/67a692c100281014ff59426fa6eb1a53
enumとは
列挙型、列挙クラスといわれる。
本記事はenumについてではないため、ザックリとした説明になりますが、
自分の認識では、
わざわざ、tableを作成し、外部キーとして呼ばなくとも中身を持ったidとして管理できるもの
どんなものに使うのか?
enumを使う代表的なものといえば、都道府県でしょうか
optionで書くのも面倒ですし、テンプレを使ったとしても冗長で読みやすいコードとは言い難いですね。
enum delivery_prefecture:{
"北海道":1,"青森県":2,"岩手県":3,"宮城県":4,"秋田県":5,"山形県":6,"福島県":7,
"茨城県":8,"栃木県":9,"群馬県":10,"埼玉県":11,"千葉県":12,"東京都":13,"神奈川県":14,
"新潟県":15,"富山県":16,"石川県":17,"福井県":18,"山梨県":19,"長野県":20,
"岐阜県":21,"静岡県":22,"愛知県":23,"三重県":24,
"滋賀県":25,"京都府":26,"大阪府":27,"兵庫県":28,"奈良県":29,"和歌山県":30,
"鳥取県":31,"島根県":32,"岡山県":33,"広島県":34,"山口県":35,
"徳島県":36,"香川県":37,"愛媛県":38,"高知県":39,
"福岡県":40,"佐賀県":41,"長崎県":42,"熊本県":43,"大分県":44,"宮崎県":45,"鹿児島県":46,
"沖縄県":47
}
このように記載することで、今回でいうdelivery_prefectureがidで管理されるようになります
migrationファイルはintegerにしておきましょう
selectフォームの作成
products/new.html.haml
.form__group
= f.label :delivery_prefecture do
発送元の地域
%span.form-description.form-require 必須
= f.select :delivery_prefecture, Product.delivery_prefectures.keys,{include_blank: '選択してください'},{class: "exhibition__select"}
.form__group
= f.label :delivery_prefecture do
発送元の地域
%span.form-description.form-require 必須
= f.select :delivery_prefecture, Product.delivery_prefectures.keys,{include_blank: '選択してください'},{class: "exhibition__select"}
今回であれば
Product.delivery_prefectures.keys
モデル.カラム名(複数形).keys
この記述で選択肢に先ほどのenumの記述部分が適用されます。
注意としては、複数形にすることです。
ちなみに
{include_blank: '選択してください'}
によって何も選択されていない時に 選択してください と表示されるようにしています
おまけ
products/new.html.haml
.form__group
= f.label :delivery_days do
発送までの日数
%span.form-description.form-require 必須
= f.select :delivery_days, Product.delivery_days.keys,{include_blank: '選択してください'},{class: "exhibition__select"}
product.rb
enum delivery_days:{
"1~2日で発送": 1,
"2~3日で発送": 2,
"3~7日で発送": 3,
}
.form__group
= f.label :delivery_days do
発送までの日数
%span.form-description.form-require 必須
= f.select :delivery_days, Product.delivery_days.keys,{include_blank: '選択してください'},{class: "exhibition__select"}
enum delivery_days:{
"1~2日で発送": 1,
"2~3日で発送": 2,
"3~7日で発送": 3,
}
このようにカラム名に複数形が使われている場合(あまり望ましくないが、dayだと変なので今回は止むを得ず、、)は、そのままカラム名を記載するだけでうまく行きます。
最後に
本記事がQiita初投稿になります
アドバイス等いただけたら幸いです!
Author And Source
この問題について([Ruby on Rails]enumを用いたselectフォームの作成), 我々は、より多くの情報をここで見つけました https://qiita.com/Yamato_Jacob/items/4b4d971556d94906e142著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .