2015-11-20 3 views
2

я пытаюсь сделать канал (любопытное временной шкалы следующий канал в ежедневной основе)Создание корма (после), сгруппированные по день и пользователь, заказанный последним на рубин на рельсах

У меня есть таблица photos где он хранит фотографии, загруженные пользователем, таблицу 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 

В принципе, я хочу, чтобы выполнить подачу, которая выглядит так (проще нарисованный чем объяснить)

enter image description here

  • самые последние появляются в верхней
  • группы все фотографии, размещенные пользователь, которого мы «следим», включая мой собственный «день»
  • дисплей сегодня, вчера, 2 дня назад и т. д.

ответ

1

Это одно из решений.

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 делает в вашем случае, но выше должно работать.

+0

followable_type = act as followable gem позволяет любым субъектам следовать за любыми объектами. Так что id сам по себе недостаточен нужна комбинация типа сущности i.e followable_type и id – Axil

+0

спасибо за ваш ответ, мы попробуем его, но им просто интересно, включает ли он также «ваш собственный идентификатор пользователя - ваш собственный канал»? я чувствую, что это пропало. спасибо – Axil

+0

@Axil В него входят все, за кем вы следите. Должен ли он также включать действия владельцев? – Oleander