はじめに
個人開発アプリでGoogle APIと連携して地図情報を取得できる様にしたのですが、
住所を全て手入力するのは面倒なので都道府県をプルダウン方式で選択できるようにしようと思います。
new.html.erb
<%= form_for @ride, method: :post do |f| %>
<%= f.select :prefecture, ['北海道', '青森県', '秋田県', '岩手県' 以下略], { include_blank: '選択してください' } %>
<% end %>
コードの可読性を無視して実装するならこんな感じで入力していくだけなのですが、
このようにview側に47都道府県全てを入力すると非常に見苦しいと思ったのでスマートにできる方法を探してみました。
enum
enumというものがあるようでこれによってviewではなくmodelに記述することができ、
view側のコードをかなりスッキリさせることができます!
class CreateRides < ActiveRecord::Migration[5.2]
def change
create_table :Rides do |t|
t.integer :ride_area, null: false, default: 0
end
end
まずはintegerでカラムを作成します。
ride.rb
class Ride < ApplicationRecord
enum ride_area:{
"---":0,
北海道: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
}
end
モデル側にはこんな感じで都道府県を書いておきます。
ハッシュのキーがセレクトボックスに表示されます。
new.html.erb
<%= form_for @ride, method: :post do |f| %>
<%= f.select :prefecture, Ride.ride_areas.keys, {} %>
<% end %>
冒頭で書いたコードをこのように書き換えてあげましょう。
Ride.ride_areas.keys, {}
と書く事でモデルに書いている都道府県全てを順番に処理してくれるのでブラウザ上ではプルダウン方式で都道府県が選択できるようになっています!
以上です。