こんにちは。現在Railsを用いて小さなSNSを練習で作成しています。
このサイトはユーザがいくつかの写真から成るアルバムをアップロード出来たり、アルバムに対して「いいね!」が出来たりするような形になっています。
そこでユーザのタイムラインに表示する為のデータを取得したいのですが、少し躓いているので、助けて頂けると嬉しいです。
テーブル構造は以下のようになっています。
lang
1Albumsテーブル id, user_id, name, created_at, updated_at 2Likesテーブル id, user_id, album_id, created_at, updated_at 3 4user_idはアルバムをアップロードしたユーザのid, 「いいね!」をしたユーザのidとなっています。
この二つのテーブルから取得したいデータははフォローしているユーザがアップロードしたアルバムと、彼らが他のユーザのアルバムを「いいね」した情報です。現在これらのデータは下記のように取得しています。
lang
1def self.timeline(following_ids) 2 albums = Album.where(user_id: following_ids).includes(:uploaded_pictures).includes(:user) 3 likes = Like.where(user_id: following_ids).includes(:user).includes(album: :user) 4 return albums.concat(likes).sort_by{|content| content.created_at}.reverse 5end
ここで質問があります。二つのテーブルを合わせてこれと同じデータを下記のように一行でorder(:created_at)で取得する事は可能でしょうか?一行で取得しなければいけない理由としては、OffsetとLimitを用いてタイムライン上で、ある一定の量を表示し、"もっと見る"を設けたいからです。二つのテーブルからバラバラにデータを取得した場合created_at順にOffsetがうまく働かなくなってしまいます。
lang
1このような感じです 2 * from Album and Like where user_id: following_ids order by created_at offset num limit num
ここで躓き、解決策が見つからず次に進めない状態になっています。
質問の意味が分かりにくいかもしれませんが、分かる方いらっしゃいましたら、回答お願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。