いつも参考にさせていただいております。
##<やりたいこと>
仮に以下の3つのモデルがあるとして、
・user
・post・・・投稿データ
・unread・・・投稿データに対するユーザー毎の未読データ
postの一覧を取得するときに以下条件でsortしたうえで、limitを10件などで取得したいです。
第1ソート 未読の有無
第2ソート 最終更新日
ruby
1class User < ActiveRecord::Base 2 # ユーザー 3 has_many: unreads 4 has_many: unread_posts, through: :unreads, source: "post" 5end 6 7class Unread < ActiveRecord::Base 8 # 未読状態では、ユーザー x 投稿毎に1件unreadが存在します 9 belongs_to :user 10 belongs_to :post 11end 12 13class Post < ActiveRecord::Base 14 # 投稿 15end
<わかならないこと>
効率よくPostの一覧を上記sort、limitをかけて取得するには、どのように書くのがよいのでしょうか?
一応以下イメージのようには書けるとは思うのですが、全Postをメモリに保持するのは、パフォーマンス上よくないかと...
ruby
1posts = Post.all.reorder(:updated_at, :desc) 2unread_posts_ids = current_user.unread_posts.map(&:id) 3posts.sort_by{|post| unread_posts_ids.include?(post.id) ? 0 : 1 } 4posts.first(10)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/10 10:42
2017/08/10 12:16
2017/08/11 11:07