はじめに
前回の記事で作成したDMリストを、上からやりとりの新しい順に表示させます。
前回作成したコントローラーの記述を編集するだけで、すごい簡単に出来ます。
仕様などは以下を参考にしてください。
[Rails]DMユーザーリストを表示
コントローラーの編集
orderを使用して、messagesテーブルのcreated_atで基準に並べ替えたいのですが、orderで他のテーブルを使う場合は、joinsでINNER JOINをしてあげないと探せないため、以下のように書きます。
rooms_controller.rb
def index
@rooms = current_user.rooms.joins(:messages).includes(:messages).order("messages.created_at DESC")
end
これだけで新しい順に並べることができます。
つまずき
NG.rb
@rooms = current_user.rooms.joins(:messages).includes(:messages).order("created_at DESC")
と最初書いていたのですが、これではどのテーブルの created_at を参照するのかがわからずエラーとなりました。
ということで以下のように編集したところ、直すことができました。
OK.rb
@rooms = current_user.rooms.joins(:messages).includes(:messages).order("messages.created_at DESC")
おわり
最後まで読んでいただき、ありがとうございました。