エラーが起きる箇所
自身(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 コメント