RailsChat message
参考
Ruby on Rails チュートリアル 機能拡張5(メッセージ機能)
Messageモデルの生成
rails generate model Message content:text from_id:integer to_id:integer room_id:string
$ rails db:migrate
モデル同士の関連付け
app/models/message.rb
app/models/users.rb
messageModelに
scopeとvalicationを設定
userModelに
メッセージ送信のためのメソッド追記
コントローラーとビュー
受信者のページで表示だから
UserController#showで実現
@room_idで部屋受け取って
@messagesで出力を決める
<%= render @messages %>
の中身は
app/views/messages/_message.html.erb
新規コメントは非同期だからcurrent_userなどが使えない!
session[:user_id]などを変数として維持して
処理を行う。
<% user = User.find_by(id: message.from_id) %>
ここで取得するだけ。
ActionCable
rails g channel chat speak
まずはじめにroutes.rbに
mount ActionCable.server => '/cable'
app/assets/javascripts/channels/chat.coffeeに
クライアントサイドの処理を記述
簡単に言うと
・値取得
・ルームID取得
・メッセージの出力先(高さ)取得
・ページ遷移、読み込み時の処理
・エンターキー押された時の処理(speak)
app/models/messages
にコールバック(ブロードキャスト)追加
rails g job MessageBroadcast
app/jobs/message_broadcast_job.rb
にブロードキャスト処理追加
Heroku環境でAction Cableでリアルタイムチャット
Action Cableでリアルタイムチャットアプリの作成方法 (Rails 5.1.4にて)(その1) herokuで動かす!
config/environment/production.rb
config.action_cable.allowed_request_origins = [ 'https://railsroomchat.herokuapp.com' ]
config/cable.yml
production:
# adapter: redis
# url: redis://localhost:6379/1
# channel_prefix: RailsChat_production
adapter: async