Help us understand the problem. What is going on with this article?

Railsのラジオボタン(f.radio_button)、セレクトボックス + enum(都道府県あり)の使い方

More than 3 years have passed since last update.

検索ワード

rails ラジオボタン
rails ラジオボタン 複数
rails ラジオボタン enum
rails radio_button

シンプルにコードのみ公開します。

作業手順

  1. enumを使う場合、カラムのデータ型はintegerで作成する。 ※ stringだとDBに保存されない!!
  2. マイグレーションファイルには、「default: 0」 を記述する。 *場合による。
  3. ストロングパラメータにカラム名を入れる。
  4. 以下に進む

ラジオボタンの場合

job_administration.rb
enum job_type: {一般の求人:1, 特殊な求人:2, 不思議な求人:3}
_form.html.erb
<div class="field">
  <span class="job_type_engine">求人検索エンジン用</span><br>
  <div class="radio-inline">
    <%= f.radio_button :job_type, :一般の求人, checked: "checked" %>
    <%= f.label :一般の求人, class: "job_type_label" %>
  </div>
  <div class="radio-inline">
    <%= f.radio_button :job_type, :特殊な求人 %>
    <%= f.label :特殊な求人, class: "job_type_label" %>
  </div>
  <div class="radio-inline">
    <%= f.radio_button :job_type, :不思議な求人 %>
    <%= f.label :不思議な求人, class: "job_type_label" %>
  </div>
</div>
confirm.html.erb
<strong>求人の種類</strong><br>
<%= f.hidden_field :job_type %>
<%= @job_administration.job_type %>

DBから値を取得してみる

rails c
JobAdministration.find_by(job_type: 2) # 整数でアクセス
「特殊な求人」のレコードを取得
DBには文字列で入っているように見えるが、取得は整数で行う。

セレクトボックスの場合

job_administration.rb
enum status: {審査中:0, 承認:1, 却下:2}
_form.html.erb
<div class="field">
  <%= f.select :status, ApplicantStatus.statuses.keys, {prompt: '選択してください'}, class: 'form-control btn btn-info' %>
</div>

# ApplicantStatus.statuses.keys の statuses(カラム名)は複数形にする。

数値は注意する

この場合の数値は、「全角」にすること!! 半角ではエラーになる。

money.rb
enum minimum_annual_income_search: {300万以上:1, 400万以上:2, 500万以上:3, 600万以上:4, 700万以上:5, 800万以上:6, 900万以上:7, 1000万以上:8}

複数のenum属性を持つ場合の注意

lunch_set.rb
class LunchSet < ActiveRecord::Base
  enum curry: { chicken: 0, vegitables: 2, beans: 3, shrimp: 4 }
  enum drink: [:coffee, :mango, :chai, :vegitables]
end

しかし、このコードは、vegitablesという名前を2回使っているため、vegitables?などのメソッドが多重定義となり、エラーになります。

従って、複数のenum属性を使う場合は、例えば名前に接尾辞をつけるなどして、名前がかぶらないように注意してください。

lunch_set.rb
class LunchSet < ActiveRecord::Base
  enum curry: { chicken_curry: 0, vegitables_curry: 2, beans_curry: 3, shrimp_curry: 4 }
  enum drink: [:coffee_drink, :mango_drink, :chai_drink, :vegitables_drink]
end

都道府県のセレクトボックス

enumを使用するため、work_locationカラムをintegerで作成(追加)する。

schema.rb
t.integer  "work_location"

モデルに以下を記述

job_administration.rb
  enum work_location: {
    北海道: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
  }

formに以下を記述

_form.html.erb
<div class="field">
  <%= f.label :勤務地、求人検索エンジン用 %><br>
  <%= f.select :work_location, JobAdministration.work_locations.keys, {prompt: '選択してください'}, class: 'form-control btn btn-info' %>
</div>

参考サイト
http://qiita.com/seisonshi/items/fb123f0a05b6b40d72af
http://tech.misoca.jp/entry/2015/08/10/132419
http://code-examples-ja.hateblo.jp/entry/2014/07/29/Bootstrap%E3%81%A7%E3%83%A9%E3%82%B8%E3%82%AA%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%84%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E6%A8%AA%E4%B8%A6%E3%81%B3

dawn_628
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした