🏡
【Rails】options_from_collection_for_select(ドロップダウンリスト)
options_from_collection_for_selectとは
配列やハッシュからセレクトボックス(ドロップダウンリスト)のオプションを作成するのに使うヘルパーメソッド。
特に、外部キーを持つデータを選択する際によく使用する。
例えば、Order(注文)テーブルがあり、各注文には外部キーとして、shipping_address_id(配送先のID)があるとする。また、ShippingAddress(配送先)テーブルもあり、注文が関連付けられている。
- Order テーブル:
| id | order_number | shipping_address_id |
|---|---|---|
| 1 | 1001 | 2 |
| 2 | 1002 | 1 |
| 3 | 1003 | 3 |
- ShippingAddress テーブル:
| id | name | address |
|---|---|---|
| 1 | がんも | 123 Oden St |
| 2 | だいこん | 456 Dashi St |
| 3 | たまご | 789 Nabe St |
注文作成フォームで、配送先を選択するプルダウンメニューを作成する場合:
# Controllerのアクション
def new
@order = Order.new
@shipping_addresses = ShippingAddress.all
end
# Viewファイル
<%= form_with @order do |f| %>
<!-- 他のフォーム要素 -->
<div class="form-group">
<%= f.label :shipping_address_id, "配送先" %>
<%= f.select :shipping_address_id, options_from_collection_for_select(@shipping_addresses, :id, :name) %>
</div>
<%= f.submit "注文を確定する", class: "btn btn-primary" %>
<% end %>
options_from_collection_for_selectが@shipping_addresses(ShippingAddressテーブルのレコードの配列)を元に、プルダウンメニューのオプションを作成する。第1引数に配列やデータベースのレコードを指定し、第2引数にオプションの値として使用したいカラム(ここでは:id)を、第3引数にオプションの表示として使用したいカラム(ここでは:name)を指定する。
結果として、プルダウンメニューには以下のような選択肢が表示される:
<select name="order[shipping_address_id]">
<option value="1">がんも</option>
<option value="2">だいこん</option>
<option value="3">たまご</option>
</select>
ユーザーはこれらのオプションから選択して、注文の配送先を指定できるようになる。options_from_collection_for_selectを使用することで、外部キーの選択肢を作成できるため、データベースのリレーションシップを持つモデル間で関連するデータを表示する際に便利!
Discussion