🐈

Rails|プルダウンの選択肢を他のモデルから取得する方法

2023/08/18に公開

開発環境

ruby 3.1.2p20
Rails 6.1.7.4
Cloud9

前提

ER図やテーブル定義書はこちらの記事の通りです。
https://zenn.dev/airiin/articles/02ed96e9a80885
https://zenn.dev/airiin/articles/4691b219877e67

プルダウンの選択肢を他のモデルから取得する方法


画像のように、商品モデルのジャンルカラムをジャンルモデルのデータから取得したい場合のコードは以下の通りです。

<%= f.collection_select :genre_id, Genre.all, :id, :name, include_blank: "選択して下さい" %>

f.collection_selectで、プルダウンの選択肢の回答フォームを作成できます。

1️⃣:genre_id
このセレクトボックスの名前です。このフィールドで保存した値は:genre_idキーとしてサーバーに送信されます。

2️⃣Genre.all
このセレクトボックスの選択肢のソースです。今回はGenreモデルの全てのオブジェクトが参照されます。

3️⃣:id
2️⃣に記載したGenreモデルのidを使用して、選択肢のソースを持ってくるという意味です。

4️⃣:name
セレクトボックス内のオプションのテキストとして表示する内容を指定します。今回はGenreモデルのnameを選択肢に表示させます。

include_blank: "選択してください"
セレクトボックスの最初のオプションとして、空白のオプションを追加します。

補足

手動で選択肢を作りたい時は、以下のように記述します。

<%= f.select :保存先のカラム名, [["選択肢1", "実際にDBに保存させる内容"], ["選択肢2", "実際にDBに保存させる内容"]], include_blank: "選択して下さい" %>

参考にさせていただいた記事

https://qiita.com/kawakami_shotaro/items/11a677bf34136cb7686d
https://qiita.com/otaki0413/items/d1cddea70cf680c602d2

Discussion