こちらの実装に少し時間をかけてしまったため、備忘とアウトプットして記録します。
初心者のため、他にも方法があるかと思いますので、相違箇所があればご指摘下さい。
今回下記に記述する内容は、
userモデルの(faciliti_user)あるカラムに登録されている値をビューでプルダウンで表示し、noteモデルへ登録する方法となります。
(DBにに登録されている値をプルダウン方式で表示し別モデルに値を登録する。)
■前提
・note,userモデルはアソシエーション済みとする。
・登録する型は値ではなく、string型の文字列とする。
コントロール設定
Userモデルのfacility_userカラムの値を取得し、インスタンス変数@userへ代入する。
class NotesController < ApplicationController
def new
@note = Note.new
@user = User.select(:facility_user)
end
end
view
プルダウン方式でのコード
始めは下記の様な記述をしてしまい、idの値が保存されてしまっていました。原因としては、userレコードのid属性を選択した値としまっていたことでした。
<%= f.collection_select(:facility_user, User.all, :id, :facility_user, {}, {class:"select-box", id:"item-shipping-fee-status"}) %>
上記をこちらに修正。
<%= f.collection_select(:facility_user, User.all, :facility_user, :name, {}, {class: "select-box", id: "item-shipping-fee-status"}) %>
id_1以外を表示したい場合は、User.where.not(id: 1)とし、1を以外を指定する。
<%= f.collection_select(:facility_user, User.where.not(id: 1), :facility_user, :name, {}, {class: "select-box", id: "item-shipping-fee-status"}) %>
[解説]
まず、f.collection_selectメソッドとは、モデルの関連するオブジェクトから選択ボックスを生成するメソッドです。
例えば、投稿に紐づくユーザーからコメントの投稿者を選択できるようにすることができます。
今回についても、登録されたカラムの値を別のモデルに紐付けするために使用しました。
・facility_userはカラム名で、選択された値が送信されるパラメーターの名前を表します。(別途create時に、ストロングパラメーターの記述を忘れずに)
・:facility_userと:nameは、それぞれ選択ボックスの値と表示するテキストを指定します。
User レコードの facility_user 属性を選択された値とし、User レコードの name 属性を選択肢のテキストとして使用します。
・{}は、デフォルトの選択肢を指定するためのオプションのハッシュです。
・最後の引数{class: "select-box", id: "item-shipping-fee-status"}は、HTMLの属性として、選択ボックスにCSSクラスとIDを追加することで、CSSやJSへの反映が可能です。
以上
まだ全てを理解できたわけではないですが、色々調べて何とか自力で乗り越えられました。使用しながら理解を深めていきたいと思います。