複数のルームとメッセージの紐付け
プログラミングを初めて1ヶ月の初心者です。
rails でactioncableを利用してチャットアプリを作成していますが、ルームとメッセージの紐付けをしてメッセージを表示しようとするとメッセージが表示されません。
発生している問題・エラーメッセージ
エラーは起きていませんが、メッセージを送信すると、DBに保存されますが、messsageモデルのroom_idが保存されないため、メッセージがviewで表示されません。sequel proから直接room_idは入力するとメッセージが表示されます。
###show.html.erb
<div class="form_form"> <h1>Chat room</h1> <div> <div id="messages", data-room_id="<%= @room.id %>"> <%= render @messages %> <!-- Messageの一覧を表示 --> </div> <form> <label>メッセージを入力:</label><br> <input type="text" data-behavior="room_speaker"> </form> </div>
###room_channel.rb
class RoomChannel < ApplicationCable::Channel #サーバーサイドの処理を受け持つチャンネル def subscribed stream_from "room_channel_#{params['room_id']}" end def unsubscribed # Any cleanup needed when channel is unsubscribed end def speak(data) Message.create!(content: data['message'], user_id: current_user.id, room_id: params['room_id']) end end
###room.coffee
document.addEventListener 'turbolinks:load', -> App.room = App.cable.subscriptions.create { channel: "RoomChannel", room_id: $('#messages').data('room_id') }, connected: -> # Called when the subscription is ready for use on the server disconnected: -> # Called when the subscription has been terminated by the server speak: (message) -> @perform 'speak', message: message received: (data) -> $('#messages').append data['message'] $(document).on 'keypress', '[data-behavior~=room_speaker]', (event) -> if event.keyCode is 13 # return = send App.room.speak event.target.value event.target.value = '' event.preventDefault()
補足情報
あなたの回答
tips
プレビュー