创建按日期和用户分组的供稿(以下),按最近在 ruby 和 rails 订购

Creating a feed (following) grouped by day and user that is ordered by most recent on ruby on rails

我正在尝试做一个 feed(每天按照 feed 的时间线)

我有一个 table photos 存储用户上传的照片,一个 table follows 存储每个用户关注的用户。

 create_table "photos", force: :cascade do |t|
 ...
    t.integer  "user_id"
    t.datetime "created_at"
    t.datetime "updated_at"
 ...

create_table "follows", force: :cascade do |t|
    t.integer  "followable_id",                   null: false
    t.string   "followable_type",                 null: false
    t.integer  "follower_id",                     null: false
    t.string   "follower_type",                   null: false
    ...
    t.datetime "created_at"
    t.datetime "updated_at"
end

基本上,我想完成一个看起来像这样的提要(绘制比解释更容易)

这是一种解决方案。

current_user_id = current_user.id

Photo.select(%q{
  user_id, 
  COUNT(*) no_photos, 
  date_trunc('day', created_at::timestamp) as what_day
}).group("what_day, user_id").order("what_day DESC").where(%Q{
  user_id IN (
    (SELECT followable_id FROM follows where follower_id = #{current_user_id})
    UNION ALL
    (SELECT #{current_user_id} as followable_id)
  )
})

date_trunc 将日期截断到指定的精度,在本例中是一天的开始。我不确定 follows.followable_type 在你的情况下做了什么,但上面应该有效。