🐈
Rails|プルダウンの選択肢を他のモデルから取得する方法
開発環境
ruby 3.1.2p20
Rails 6.1.7.4
Cloud9
前提
ER図やテーブル定義書はこちらの記事の通りです。
プルダウンの選択肢を他のモデルから取得する方法
画像のように、商品モデルのジャンルカラムをジャンルモデルのデータから取得したい場合のコードは以下の通りです。
<%= 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: "選択して下さい" %>
参考にさせていただいた記事
Discussion