#59 8/27-31 メッセージ機能
そもそもメッセージ機能実装に使おうとしている ActionCableとは。
-
WebSocketとRailsのその他の部分をシームレスに統合したもの
-
一度、HTTPのコネクションが確立すると、websocket通信で、サーバー・クライアントの両方からリクエストが遅れる状態を簡単に実装可能
https://qiita.com/YN6127yn/items/7ddd966141cca195b4da
WebSocketって?
・双方向通信のプロトコル(プロトコルなのでHTTPとかと同レイヤー)
・ハンドシェイクまではHTTPが行い、コネクション確立したらWebSocketが双方向通信を行う
https://qiita.com/chihiro/items/9d280704c6eff8603389
実装モデルに関して
今回の理想機能は、
”各ユーザー同士が1:1でリアルタイムチャットが行えること(user:msg=1:多)”
・一人が複数人のチャットルーム1つに入るのみではなく(user:msg=1:1でもなく)
・一人が複数人のチャットルームにいくつも入れるわけでもない(user:msg=多:多でもない)
1.routesに関して
resources :message,:only => [:create, :destroy, :show]
で、POST "/message/show/1" => "message#show"
今回だとindexよりshowの方が適正
また1という数字は、messageのルーム番号になるかと。
2.Viewに関して
messages/show(当たり前だけどアクション名が来る)なので、
messagesディレクトリのshow.html.erbが大元。
その中にパーシャルでfeedとかが入る感じ?
usersのsharedフォルダの中ももしかしたら使うかも。
3.Controllerに関して
messages_controller.rbで、def create def showを定義
※Quitaではここがuser.show.htmlで表示
---
1.モデル作成
rails generate model Message content:text from_id:integer to_id:integer room_id:string
2.エラー
def message_room_id(first_user, second_user)
first_id = first_user.id.to_i
second_id = second_user.id.to_i
if first_id < second_id
"#{first_user.id}-#{second_user.id}"
else
"#{second_user.id}-#{first_user.id}"
end
end
undefined method `id' for nil:NilClass
idが定義されていないと怒られる。
以下リンクのように、ログインしていないからその前のcurrent_userがnilになっている気がする
https://teratail.com/questions/67514
beforeactionなどを使ってどうやって解決しよう。。。
使えそうで使えない
http://bryankawa.hatenablog.com/entry/2017/03/18/130855
ちょっと使えそう
https://b1840943.hatenablog.jp/entry/2018/05/31/231035
8/31一旦断念