メソッドあれこれ(references型、select要素、where.not)
今日の工夫
コードは基本手打ちして、VScodeのチェック機能で後からチェックする。
間違いやすいところのチェックになる。カリキュラムからVScodeに画面を切り替えるときは、該当テキストをドラッグしておく。
戻ってきたときにすぐに目がいくように。コードの区切りが分からなくなるので、
「--------------------------」
をコメントアウトして入れる。
references型
外部キーのカラム追加@マイグレーションファイル
# t.refernces :カラム名 t.refernces :user, foreign_key: true # => user_idカラムが生成
中間テーブルを通じてレコード作成
% rails c [1] irb(main)> Room.create(name: "ルーム1", user_ids:[1,2])
Roomモデルに対してcreateを実行すると、同時に中間テーブルにもレコードが保存される。
user_ids
で、userテーブルのidを指定し、紐づけている
select要素、option要素
<!-- プルダウンを作るときに使う。 --> <select> <option>選んでください</option> <option>hoge1</option> <option>hoge2</option> </select>
<!-- name属性でパラメーターとしての名前を指定 --> <!-- 後ろに[]をつけると、配列になる --> <select name="hoge[user_ids][]"></select> <!-- value属性でパラメーターの値を指定 --> <!-- 表示はuser.name、valueはuser.id --> <option value=<%= user.id %>><%= user.name %></option> => {"user_ids" => ["選んだuser.id"]}
<!-- 後から下記も追記すると、current_user.idもパラメータに含められる --> <input name="hoge[user_ids][]" value=<%= current_user.id %>> => {"user_ids" => ["選択した値", "current_user.id"]}
where.not("条件”)
ActiveRecord: 〜以外のレコードを指定
# ログインユーザー以外で繰り返し処理 User.where.not(id: current_user.id).each do |user|
配列をストロングパラメータに渡す
# selectの時と同じ。[]をつける。 params.require(:hoge).permit(user_ids: [])