前提
応募して作成されたDMをDM一覧で表示させようとしています。
テストで掲載者1,応募者2で複数人の応募とDM一覧をしっかりと表示されるかを試していたところ、応募者のDM一覧で、自身が応募していないDMまで表示されます。
当該userは2つ応募してDM一覧に2つだけ表示したいが、2つだけ表示されてはいるのですが、自分のDMと他人のDMの2つが表示され自身のDMの2つ目が表示されませんでした。
現在の一覧
DM-A :自身
DM-A: 他人
やりたい一覧表示
DM-A :自身
DM-B :自身
発生している問題・エラーメッセージ
意図的にエラーを起こして、controllerに定義した変数にしっかり、取得出来ているか確認したところ、しっかり2つだけ取得出来ているのですが、eachの取り出し方が悪いのでしょうか?
該当のソースコード
!すみませんusersと書かれていましたがroomsでした。
rooms_controller.rb
1def index 2 @pagy,@rooms = pagy(Room.all.order(id: "DESC").select(:id,:room_name,:plan_id), items:10) 3 @currentEntries = current_user.entries 4 myRoomIds = [] 5 6 @currentEntries.each do |entry| 7 myRoomIds << entry.room.id 8 end 9 10 @anotherEntries = Entry.order(id: "DESC").where(room_id: myRoomIds).where('user_id != ?',current_user.id) 11 12 end
_room.html.erb
1<div> 2 <% @rooms.zip(@anotherEntries) do |room,entry| %> 3 <% if entry.nil? %> 4 <% else %> 5 <div class="dm-list-box"> 6 <div class="dm-list-conent"> 7 <div class="dm-list-user-name"> 8 <h5>相手:</h5> 9 <p><%= link_to entry.user.name, user_path(entry.user), class: "text-decoration-none" %></p><br /> 10 </div> 11 <div class="dm-list-plan-name"> 12 <h5>掲載名:</h5> 13 <p><%= link_to room.room_name, plan_path(room.plan_id), class: "text-decoration-none" %></p> 14 </div> 15 </div> 16 <div class="dm-list-btn"> 17 <p><%= link_to 'メッセージ', room, class: "btn btn-outline-danger btn-lg" %></p> 18 </div> 19 </div><br /> 20 <% end %> 21 <% end %> 22 <div class="d-flex justify-content-center mb-2"> 23 <%== pagy_bootstrap_nav(@pagy) %> 24 </div> 25</div>
試したこと
一度entryをeachで取り出すのを止めてroomだけを一つずつ取り出したら全部のDMが表示されました。
恐らく2つ目からはentry.user.nameがうまく取り出せていないということが分かりました。
ですが上記の写真を見るとDMの相手の変数@anotherEntriesにはしっかりと2つだけ取得出来ています。ならばentry.user.nameは取得出来ていると思うのですが、eachで一つずつ取り出すときに変な取り出し方をしているのでしょうか?
!追記
rooms_controllerの変数
@pagy,@rooms = pagy(Room.all.order(id: "DESC").where(id: @currentEntries).select(:id,:room_name,:plan_id), items:10)
で@roomsを@currentEntriesのidと合致するものだけ絞ると、自身のDmだけを表示することが恐らくできたのですが、2つ目が表示されません。
今、原因を調べています。
何か手がかりが分かり次第、質問に追記させていただきます。
!追記
@roomsの中身を調べたところRoomが1つしか取り出せていませんでした。
>> @rooms => #<ActiveRecord::Relation [#<Room id: 1, room_name: "テスト1", plan_id: 1>]>
回答2件
あなたの回答
tips
プレビュー