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