はじめに
記事①と記事②を参考にDM機能を作らせていただきました。投稿してくださった方々に深く感謝いたします。
以下は記事①の通りにDM機能を作成した前提で進めます。
やりたいこと
TwitterやLINEのようにメッセージの一覧に最後のメッセージを表記させる。
実装
記事①通りに進めるとメッセージ一覧はrooms#indexに表示させることになると思うので、以下のようにすればユーザ間の最後のメッセージを引っ張ってくることができます。
まず、記事②を参考にroomsコントローラ側に@anotherEntries
を定義します。
roomsコントローラー
def index
@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
そして、@anotherEntries
にはuser_idが自分のidではない相手の情報が配列として入っているので、以下のようにすればやりとりした最後のメッセージを引っ張ってこられます。
rooms#index
<% @anotherEntries.each do |e| %>
<%= Message.find_by(id: e.room.message_ids.last).content %>
<% end %>
上はただ表記させただけなので、あとは自分好みにリンクにしたり字数に制限をかけたりしてみてください。
また、ここでは最後のメッセージを表示させましたが、上記のcontent
の部分をuser.name
にすれば最後にメッセージを送ったユーザ(自分か相手)の名前を引っ張ってくることもできます。