У меня есть таблица users
, таблица restaurants
и таблица visits
, которая объединяет оба. Я хочу вернуть список всех ресторанов вместе с последней датой посещения ресторана текущим пользователем.
Итак, представьте, что у меня есть 4 ресторана в моей базе данных, и таблица посещений выглядит следующим образом:
Посещения:
Restaurant: User: Created at:
R1 1 Mon
R1 1 Tue
R1 2 Tue
R2 3 Thur
R4 1 Wed
R4 1 Fri
Предполагается текущий пользователь # 1, тогда я хочу вернуть что-то вроде:
Restaurant: Last Visit At:
R1 Tue
R2 null
R3 null
R4 Fri
Пока что я попробовал:
def restaurants_with_last_visit(user)
Restaurant.joins("LEFT JOIN visits ON visits.restaurant_id = restaurants.id AND visits.user_id = #{user.id}").select('restaurants.*, visits.created_at AS current_redeemed_at)
end
Но это не гарантирует, что я получу только каждый ресторан записывают один раз.
Я также пытался (основываясь на других ответах):
def restaurants_with_last_visit(user)
Restaurant.joins('LEFT JOIN visits ON visits.restaurant_id = restaurants.id AND visits.user_id = #{user.id}).select("restaurants.*, max(visits.created_at) as current_reedemed_at").group('restaurants.id')
end
Но группа возвращает массив хешей вместо реальных записей.
Может кто-нибудь мне помочь? Это кажется таким простым, но таким трудным