

現在、[【Rails6】（送信時のリロード無し！）Action CableでSlack風チャットアプリを作成-
Qiita](https://qiita.com/take18k_tech/items/00cc14c0eff45073ffc7)の記事を参考にしActionCableを使用し、非同期通信のチャットルームを作成しており、チャットルームの作成はできたのですが、その作成したチャットルームをRoomのIndexで表示表示をしようとすると以下のエラーが出てきてしまいます。

[code]

    ActiveRecord::AssociationNotFoundError in Rooms#index
    Association named 'user' was not found on Room; perhaps you misspelled it?
    Extracted source (around line #9):
                  
      </div>
    
        <% @rooms.each do |room| %>
          <ul>
            <%= link_to room_path(room), method: :get do %>
              <li class="recommended_title">Title:  <%= room.name %><span class="share_comment_time">  <%= room.created_at.to_s(:datetime_jp) %></span></li>
    
[/code]

room_userという中間テーブルを作成し、そこに以下のようにアソシエーションを組んでいます。

Room_user モデル

[code]

    class RoomUser < ApplicationRecord
      belongs_to :room
      belongs_to :user
    end
    
[/code]

Roomモデル

[code]

    class Room < ApplicationRecord
      has_many :room_users
      has_many :users, through: :room_users, dependent: :destroy
      has_many :messages, dependent: :destroy
    
      def template
        ApplicationController.renderer.render partial: 'messages/message', locals: { message: self }
      end
    end
    
[/code]

Userモデル

[code]

       has_many :room_users
       has_many :rooms, through: :room_users
       has_many :messages, dependent: :destroy
    
[/code]

Rooms/Index.html.erb

[code]

    <%= render "shared/header" %>
    
    <body class="shares_body">
      <h1 class="share_title">CHAT ROOMS </h1>
      <div class="share_btn_wrapper">
        <%= link_to "◎ チャットルームを作る ◎", new_room_path, class:"share_btn" %>
      </div>
    
        <% @rooms.each do |room| %>
          <ul>
            <%= link_to room_path(room), method: :get do %>
              <li class="recommended_title">Title:  <%= room.name %><span class="share_comment_time">  <%= room.created_at.to_s(:datetime_jp) %></span></li>
            <% end %>
          </ul>
        <% end %>
      <%= paginate @rooms %>
    
        <div class="top_page_link">
          <%= link_to "トップページに戻る", "/" %>
        </div>
    </body>
    
    
    <%= render "shared/footer" %>
    
[/code]

Roomコントローラー

[code]

    class RoomsController < ApplicationController
    
      def index
        @rooms = Room.all.includes(:user).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]

ルームを作成するとカラムには反映されているので、あとはIndexのビューファイルに表示をさせたのですが、冒頭に申し上げたエラーが出てきてしまいます。  
アソシエーションはできているのかなと思っているのですが、アソシエーション関連のエラーが出てきてしまい、他のファイルなどもチェックをしてみたのですが、どこに誤りがあるのかが分からずお力添え頂きたく質問をあげさせて頂きました。  
学習も始めたばかりで拙い説明とコードではありますが、どうぞよろしくお願い致します。


CC BY-SA 4.0
2020-08-26T12:52:51.827
69893
2020-08-26T13:29:32.580
2020-08-26T13:22:29.150
41569
41569
question
ruby-on-rails ruby ajax
中間テーブルを使用しアソシエーションを組んでいるがAssociationNotFoundErrorと表示されてしまう。


自己解決しました。  
コントローラー内の.includes(:user)が不要だったようです。となると、ルームにユーザが紐づいていないのかなと思うのですが、そこはもう少し自分で調べてみようと思います。


CC BY-SA 4.0
2020-08-26T13:29:32.580
69894
2020-08-26T13:29:32.580
41569
69893
answer