LoginSignup
0
0

More than 1 year has passed since last update.

【Rails】ActionCableの実装〜mapメソッドについて〜

Posted at

はじめに

実装の流れは長くなるので省略させていただきます。
自分が疑問に思ってノートに記録した物を記事にしていきます。

前提条件

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メソッドを使用し、配列を組み合わせることで、いろんな条件分岐ができることが分かりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0