LoginSignup
3
8

More than 3 years have passed since last update.

RailsのDM一覧に最後のメッセージを表示させる方法

Posted at

はじめに

記事①記事②を参考に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にすれば最後にメッセージを送ったユーザ(自分か相手)の名前を引っ張ってくることもできます。

3
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
8