【Rails】フォームタグをform_forでやるときのセレクトボックスの作り方

2018年3月10日

リストボックスとか、ドロップダウンリストとか言うと思うけど、正式名称はセレクトボックスらしい。

こういう選択リストから選択させるフォームですね。

リファレンスを見てみる。
http://railsdoc.com/references/select

しかし意味がわからない。

http://railsdoc.com/form

こっちの方が詳しく書いてある。
選択ボックス(select)という章があるけど、自分がやりたいのと違う気がする。

使い方は

select(オブジェクト名, プロパティ名, タグの情報 [, オプション])

と書いてあって事例は

<%= select :page, :name, [[“Railsの基礎”, “rails_base”], [“Rubyの基礎”, “ruby_base”]] %>

と書いてあるけど、これも違う気がする。

いろいろさまよって自己解決したのでメモを残しておく。

たとえば年齢を選択させるフォームタグ。ageはカラム名。

登録(new)時のフォームタグのセレクトボックス

newアクションの時は、初期値が入っていないので「選択してください」を表示させる。

new.html.erbファイル

<%= form_for(@モデル名) do |f| %>

<%= f.select :age, [["20代", "20代"], ["30代", "30代"],  ["40代", "40代"], ["50代以上", "50代"],["60代以上", "60代以上"] ],  :prompt => "選択してください" %>

<% end %>

こんな感じ。

[]の中の左側は画面上に表示する文字で、右側はデータベースに登録する値です。
[]の中に[]を,区切りで入れて選択肢を増やしています。

ちなみに左側と右側が同一の場合は省略ができます。
<%= f.select :age, [“20代”, “30代”, “40代”, “50代”, “60代以上”], :prompt => “選択してください” %>
こんな感じです。

編集(edit)時のフォームタグのセレクトボックス

editアクションの時は、既に存在しているモデルのカラムを表示させておく必要があるので、
selected属性を指定したい。

edit.html.erbファイル

<%= form_for(@モデル名) do |f| %>

<%= f.select :age, [["20代", "20代"], ["30代", "30代"],  ["40代", "40代"], ["50代以上", "50代"],["60代以上", "60代以上"] ],  :selected=>@モデル名.age %>

<% end %>

このように:selected=>@モデル名.age としたらうまくいっちゃった。\(^o^)/

と、思ったらこの部分書かなくても初期表示値で出てくるよ(´・ω・`)

ていうかね、リファレンス無いから書き方わからんのよ。
予想してプログラミングしたらうまくいく!これがRailsの醍醐味(ぉぃ

あと間違ってたらご指摘お願いしますm(__)m