

現在、[【Rails6】（送信時のリロード無し！）Action CableでSlack風チャットアプリを作成-
Qiita](https://qiita.com/take18k_tech/items/00cc14c0eff45073ffc7)の記事を参考にしActionCableを使用し、非同期通信のチャット機能を実装しており、チャットルームの作成はできたのですが、その作成したチャットルームでメッセージを送信した際にブラウザ上には何も変化がなく、ターミナル上に以下のエラーメッセージが出てきてしまいます。

[code]

    Started GET "/cable" for ::1 at 2020-08-27 10:52:46 +0900
    Started GET "/cable/" [WebSocket] for ::1 at 2020-08-27 10:52:46 +0900
    Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
    RoomChannel is transmitting the subscription confirmation
    RoomChannel is streaming from room_channel
    Started POST "/messages" for ::1 at 2020-08-27 10:52:51 +0900
    Processing by MessagesController#create as JS
      Parameters: {"authenticity_token"=>"ec4H5uZQoum7g7pxCtzZ54ahkYtevZTPG4uKsFa2IqEC70mnmsxOzX6mpq+tYPFLJMLHbhXOBCnGdcVGF+4tZw==", "message"=>{"content"=>"test"}, "commit"=>"送信"}
      User Load (2.4ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
    Completed 404 Not Found in 5ms (ActiveRecord: 2.4ms | Allocations: 2232)
    
    
      
    ActiveRecord::RecordNotFound (Couldn't find Room without an ID):
      
    app/controllers/messages_controller.rb:12:in `create'
    
    
[/code]

RoomIDがないと表示されてしまっているので。(params[:room_id])をコントローラーに追加したのですが、特に表示も変わらず何が原因かがわからない状態です。

Messagesコントローラー

[code]

    class MessagesController < ApplicationController
    
      def index
        @message = Message.new
        @room = Room.find(params[:room_id])
        @messages = @room.messages.includes(:user)
      end
      
      def create
        @room = Room.find(params[:room_id])
        @message = @room.messages.create!(message_params)
        ActionCable.server.broadcast 'room_channel', message: @message.content
      end
    
      private
      def message_params
        params.require(:message).permit(:content).merge(user_id: current_user.id)
      end
    end
    
    
[/code]

Roomsコントローラー

[code]

    class RoomsController < ApplicationController
    
      def index
        @rooms = Room.all.order("created_at DESC").page(params[:page]).per(10)
      end
    
      def new
        @room = Room.new
      end
    
      def create
        @room = Room.new(room_params)
        if @room.save
          redirect_to rooms_path
        else
          render 'new' 
        end
      end
    
      def show
        @messages = Message.all.includes(:user).order(:id)
        @message = current_user.messages.build
      end
    
      private
    
      def room_params
        params.require(:room).permit(:name, user_ids:[])
      end
    end
    
[/code]

Messagesコントローラーのdef createの下にbinding.pryをかけ、その結果は以下の通りです。

[code]

    **[1] pry(#<MessagesController>)> params
    => <ActionController::Parameters {"authenticity_token"=>"meX+mFWTSwDSkuxI2lP5e99s1PW3JCSIKchiFRDiWyvixLDZKQ+nJBe38JZ979HXfQ+CEPxXtG70Ni3jUbpU7Q==", "message"=>{"content"=>"test"}, "commit"=>"送信", "controller"=>"messages", "action"=>"create"} permitted: false>
    [2] pry(#<MessagesController>)> @message
    => nil
    [3] pry(#<MessagesController>)> **
    
[/code]

初学者のため拙い説明でわかりづらい点やこちらの理解不足も多くあると思います。  
どなたかお力添え頂けますと幸いです。  
どうぞよろしくお願い致します。


CC BY-SA 4.0
2020-08-27T02:07:14.580
69903
2020-08-27T03:50:33.870
2020-08-27T03:50:33.870
41569
41569
question
ruby-on-rails ruby ajax
ActiveRecord::RecordNotFound (Couldn't find Room without an ID):と表示されメッセージの送信ができない