【Rails】formでセレクトボックスを作る
今回はRailsでformのセレクトボックスをつくるときに使う、select の使い方についての解説です。
完成コード
<%= form_with model: @post, url: posts_path, do |form| %>
<%= form.select :user_id, [['太郎', 1], ['二郎', 2]], { include_blank: true, selected: 1 }, { id: "user_id", class: "user_class" } %>
<% end %>
form_with を使ってますが、form_for の方も同じように書けます。
selectの使い方解説
f.select( プロパティ名, タグの情報, {オプション}, {HTMLオプション} )
それぞれが表しているものは以下の通りです。
プロパティ名 : カラム名 (下記に補足あり)
タグの情報 : セレクトボックス表示に使うデータの配列 or ハッシュ
オプション : セレクトボックスのオプション(include_blank, selectedなど)
HTMLオプション : HTMLのオプション (id, classなど)
もう少し具体的に見ていきます。
プロパティ名
まず、ちょっと補足です。
form_for ではプロパティ名 = カラム名でしたが、
form_with ではカラム名以外の好きな名前が指定出来ます。
要は「コントローラで、どんな名前として値を受け取りたいか?」という名前を指定しています。
コントローラでのデータの受け取り方。
params[:post][:user_id]
タグの情報
こちらは、セレクトボックス の表示に使うデータです。
つまり、optionタグに設定されるデータです。
必ず配列か、ハッシュを指定します。
# 配列
[[ 選択肢の表示名1, 実際に送信されるデータ1 ], [ 選択肢の表示名1, 実際に送信されるデータ2 ]]
# ハッシュ
{ "選択肢の表示名1" => "実際に送信されるデータ1", "選択肢の表示名1" => "実際に送信されるデータ2" }
今回の場合だと、選択肢に表示されるものは「太郎, 二郎」で、コントローラに送られるデータは「1, 2」となります。
オプション, HTMLのオプション
その名の通りセレクトボックスのオプション設定です。
ただオプションを設定する場所は、2箇所あります。
{ include_blank: true, selected: 1 }, { id: "user_id", class: "user_class" }
=> {オプション}, {HTMLオプション}
前者が通常、オプションと呼ばれるものです。
以下のようなものが代表的です。
include_blank : 先頭を空の選択肢にする
selected : デフォルトで選択しておきたい値を設定
後者はHTMLオプションと呼ばれます。
こちらはselectタグにid, classを指定したいときに使用します。
id : selectタグのid
class : selectタグのclass
このHTMLオプションを使う際には注意点があります。
必ず通常のオプションを設定しない場合でも空のカッコ{},をオプション部分に設定してください。
この空のカッコがないと、HTMLオプションが無視されてしまうので、id/classを設定したのに効いていない!ということになってしまいます。
HTMLオプション NG例
<%= form.select :user_id, [['太郎', 1], ['二郎', 2]], { id: "user_id", class: "user_class" } %>
HTMLオプション OK例
<%= form.select :user_id, [['太郎', 1], ['二郎', 2]], {}, { id: "user_id", class: "user_class" } %>
この記事が気に入ったらサポートをしてみませんか?