中間テーブルから値を取得して値を結合させたい

実現したいこと

・中間テーブルの結合
・viewにユーザー情報の表示

発生している問題・エラーメッセージ

NoMethodError in ChatRooms#show
https://i.gyazo.com/c7915d4db7313dc860a3669a114a6f47.png

該当のソースコード

app/views/chat_rooms/show.html.erb

<%= render "shared/second-header"%> <div class="container"> <div class="room-main"> <div class="heading-area"> <div class="heading"> <%= @chat_room.name %> </div> </div> <div class="user-image-area"> 投稿者:<%= link_to @chat_room.user.nickname, user_path(@user) %> <% if @chat_room.image.present?%> <div class="image-display"> <div class="image-outer"> <div class="image-item"> <%= @chat_room.image %> </div> </div> </div> <% else %> <div class="image-display"> <div class="image-outer"> <p class="image-item">no<br>image<p> </div> </div> <% end %> </div> <p class="profile-text">ルーム紹介</p> <div class="profile-area"> <div class="profile"> <%= @chat_room.introduction %> </div> </div> <div class="participate-area"> <p class="participate-btn">参加する</p> </div> </div> </div>

app/controllers/chat_rooms_controller.

class ChatRoomsController < ApplicationController def index @genres = Genre.where(:id => 2..8) end def new @chat_room_category = ChatRoomCategory.new end def create @chat_room_category = ChatRoomCategory.new(chat_room_category_params) if @chat_room_category.valid? @chat_room_category.save redirect_to root_path else render :new end end def show @chat_room = ChatRoom.find(params[:id]) @user = User.find(params[:id]) end private def chat_room_category_params params.require(:chat_room_category).permit(:name, :introduction, :genre_id, :image, :user_id).merge(user_id: current_user.id) end end

app/models/chat_room.rb

class ChatRoom < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions belongs_to :genre has_one_attached :image has_many :chat_room_users has_many :users, through: :chat_room_users belongs_to :category end

app/models/user.rb

class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable validates :nickname, presence: true PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i.freeze validates_format_of :password, with: PASSWORD_REGEX has_one_attached :image has_many :chat_room_users has_many :chat_rooms, through: :chat_room_users end

app/models/user.rb

class ChatRoomUser < ApplicationRecord belongs_to :chat_room belongs_to :user end

試したこと

エラーでNo methodが出てしまった原因としてchat_roomsテーブルにuser_idが無い為、nicknameカラムが参照出来ない為エラーが出てていると仮説を立てました。
user_idを中間テーブルから取得してインスタンスのchat_roomに代入出来ないか調べたところ、eager_loadメソッドが有効と分かりました。
解決の手順までは見えたのですが肝心の記述方法がいまいち分からず手詰まりになってしまいました。
どなたか解決方法をご教授いただけますでしょうか。

補足情報(FW/ツールのバージョンなど)

ryby
ruby on rails

コメントを投稿

0 コメント