DMの一覧を表示したいが、エラーが起きる

エラーが起きる箇所

自身(current_user)のDMの一覧を作成したく、rooms_controllerのindexアクションにentriesの中に自身のアカウントが入っているDM機能だけを取り出して表示するように調べて記述したのですが、エラーが発生しました。

NoMethodError in RoomsController#index undefined method `id' for nil:NilClass Extracted source (around line #12): @anotherEntries = Entry.where(room_id: myRoomIds).where('user_id != ?',@user.id) end def create

@anotherEntries = Entry.where(room_id: myRoomIds).where('user_id != ?',@user.id)がエラーになり調べると、anotherEntriesがnilの為作動しないと知り、
@user = User.find(params[:id])を追記したのですが、さらにエラーが発生しました。

ActiveRecord::RecordNotFound in RoomsController#index Couldn't find User without an ID Extracted source (around line #5): before_action :authenticate_user! def index @user = User.find(params[:id]) @currentEntries = current_user.entries myRoomIds = [] Rails.root: /home/ubuntu/environment/tsunageru

恐らくuserがparamsにないということだと思うのですが、つまりuserがパラメーターにないから最初のエラーも作動しなかったことなのでしょうか?
また、routes.rbのuserもresources :users,resources :roomsにしたのですが、エラーは治りませんでした。

質問

自身のDMを一覧表示するにはどこを修正すればいいでしょうか?

各種ファイル

rooms_controller.rb indexアクション

def index @user = User.find(params[:id]) @currentEntries = current_user.entries myRoomIds = [] @currentEntries.each do |entry| myRoomIds << entry.room.id end @anotherEntries = Entry.where(room_id: myRoomIds).where('user_id != ?',@user.id) end

routes.rb

Rails.application.routes.draw do devise_for :users, controllers: { registrations: 'users/registrations' } root to: 'toppages#index' get "users/show" => "users#show" devise_scope :users do get '/users', to: redirect("/users/sign_up") end resources :users do member do get :followings get :followers get :likes end collection do get :search end end resources :users resources :plans resources :relationships, only: [:create, :destroy] resources :favorites, only: [:create, :destroy] resources :messages, only: [:create] resources :rooms end

views/rooms/index.html.erb

<div message-list> <h4>メッセージ一覧</h4> <% @anotherEntries.each do |e| %> <p><%= render 'rooms', rooms: @rooms %></p> <% end %> </div>

views/rooms/_room.html.erb

<% if users.any? %> <ul class="list-unstyled"> <% rooms.each do |room| %> <li class="mb-3 d-flex"> <div> <div> <p><%= link_to @user.name, user_path(user), class: "text-decoration-none" %></p> </div> <div> <p><%= link_to @room.room_name, room_path(room), class: "text-decoration-none" %></p> </div> </div> </li> <% end %> </ul> <%== pagy_bootstrap_nav(@pagy) %> <% end %>

拙い文章で申し訳ありません。
アドバイスを頂けたら幸いです。

コメントを投稿

0 コメント