はじめに
実装の流れは長くなるので省略させていただきます。
自分が疑問に思ってノートに記録した物を記事にしていきます。
前提条件
Ruby 2.6.3
Rails 6.1.5
外部キー制約
references型の特徴
・外部キー制約がつかない。そのため、foreign_key: trueをつける。
・_idが省略される
中間テーブルに使用です。
migrate
# 外部キー制約:外部にその値を主キーとして持つ他のテーブルがあること
t.references :chat_room, null: false, foreign_key: true
mapメソッド
中間テーブルのChatRoomUserから、条件を書いて配列を作ることで、
createする際の条件分岐に使用。
ログインユーザーが存在しているチャットルームデータを取得
chat_rooms_controller.rb
ChatRoomUser.where(user_id: current_user.id).map(&:chat_room)
mapメソッドの省略形
省略する前
#map.{|変数名(ブロック引数)|具体的な処理(メソッド)}
map{|x|x.chat_room}
↓
省略形
map(&:chat_room)
省略するには3つ条件があります。
・ブロックの引数が1つである
|x|←xの1つのみなので◯
・ブロックの中で呼び出すメソッドには引数がない
x.chat_roomのうしろに()で引数がないため◯
・ブロックの中では、ブロック引数に対してメソッドを1個呼び出す以外の処理がない
x.chat_roomのメソッド1つのみなので◯
そこから得られる配列のイメージ・・・(間違っていたらすみません)
chat_room_idと書かないのはreferences型のため。
chat_rooms_controller.rb
ChatRoomUser.where(user_id: current_user.id).map(&:chat_room)
=>[1,4,5,6,7] #ログインユーザーが存在しているチャットルームid
まとめ
mapメソッドを使用し、配列を組み合わせることで、いろんな条件分岐ができることが分かりました。