LoginSignup
2
1

More than 3 years have passed since last update.

[Rails]都道府県プルダウンリスト

Posted at

前置き

検索フォームの都道府県プルダウンリスト実装を備忘録として残します。

前提条件

ransack導入済

1.導入

gem 'active_hash'

まずGemfileに上記のように記述し、bundle install。
再起動も忘れずに。

2.prefectureモデルを作成

こちら手動です。

models/prefecture.rb
class Prefecture < 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: '群馬県'}, {id: 11, name: '埼玉県'}, {id: 12, name: '千葉県'},
      {id: 13, name: '東京都'}, {id: 14, name: '神奈川県'}, {id: 15, name: '新潟県'},
      {id: 16, name: '富山県'}, {id: 17, name: '石川県'}, {id: 18, name: '福井県'},
      {id: 19, name: '山梨県'}, {id: 20, name: '長野県'}, {id: 21, name: '岐阜県'},
      {id: 22, name: '静岡県'}, {id: 23, name: '愛知県'}, {id: 24, name: '三重県'},
      {id: 25, name: '滋賀県'}, {id: 26, name: '京都府'}, {id: 27, name: '大阪府'},
      {id: 28, name: '兵庫県'}, {id: 29, name: '奈良県'}, {id: 30, name: '和歌山県'},
      {id: 31, name: '鳥取県'}, {id: 32, name: '島根県'}, {id: 33, name: '岡山県'},
      {id: 34, name: '広島県'}, {id: 35, name: '山口県'}, {id: 36, name: '徳島県'},
      {id: 37, name: '香川県'}, {id: 38, name: '愛媛県'}, {id: 39, name: '高知県'},
      {id: 40, name: '福岡県'}, {id: 41, name: '佐賀県'}, {id: 42, name: '長崎県'},
      {id: 43, name: '熊本県'}, {id: 44, name: '大分県'}, {id: 45, name: '宮崎県'},
      {id: 46, name: '鹿児島県'}, {id: 47, name: '沖縄県'}
  ]
end

app/models配下にprefecture.rbを作成し上記のように編集。
Prefecture < ActiveHash::BaseでActiveHash::BaseをPrefectureに継承。

3.検索フォーム作成(ransack導入済)

_search_form.html.haml
.search_form
  = search_form_for @q do |f|
    = f.collection_select :place_cont, Prefecture.all, :name, :name
    = f.submit "検索", class: "search_submit"

完了。
以下解説。

:place_contについて、placeはカラム名です。_contは〜を含むというransackのマッチャーというものです。
※詳しくはこちらransack

Prefecture.allは、上記のPrefectureモデル全て持ってきてってことですね〜。
Prefecture < ActiveHash::BaseでActiveHash::BaseをPrefectureに継承したからActive Recordメソッドが使えるってことです。
Active Recordメソッドとは、
・all:テーブルの全てのデータを取得する
・find:テーブルレコードの一つのデータを取得する
・new:クラスのインスタンスの生成
・save:クラスのインスタンスの保存
などのことです。

普段rails g modelで作成しているモデルもActiveHash::Baseを継承していますね。

application_record.rb
class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
end
post.rb
class Post < ApplicationRecord
end

最後の方は「:name, :name」にしています。
他の記事では「:id, :name」でしたが、これだと検索出来なかったので変えました。

htmlを確認してみると下記のようになっていました。

# 「:id, :name」の場合
<option value="1">北海道</option>

# 「:name, :name」の場合
<option value="北海道">北海道</option>

ありがとうございました!

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