🏡

【Rails】options_from_collection_for_select(ドロップダウンリスト)

2023/07/19に公開

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