2015-06-10 1 views
0
class User 
has_many :books 

Мне нужен запрос, который возвращает:Rails-запрос через ассоциацию, ограниченную уникальными связанными объектами?

Три последние книги, принадлежащие уникальных пользователей. То есть если мой DB имеет

users: 
    id: 1, name: "John" 
    id: 2, name: "Mary" 
    id: 3, name: "Bob" 
books: 
    id: 1, title: "Ender's Game", user_id: 1 
    id: 2, title: "Dune", user_id: 1 
    id: 3, title: "The Martian", user_id: 1 
    id: 4, title: "The Shining", user_id: 2 
    id: 5, title: "The Call of Cthulhu", user_id: 2 
    id: 6, title: "The Hobbit", user_id: 3 

Я ожидаю, что запрос возврата книг с идентификатором: [3, 5, 6], а те последние книги каждого соответствующего пользователя.

До сих пор я

Book.joins(:user).where(...).order(created_at: :desc).first(3) 

Заполнитель .where где фактическая Твердая часть будет.

Я знаю, что я мог бы вернуть нужные объекты, используя рубиновый контур, но, возможно, есть решение, совместимое с областью применения?

ответ

0

Вы можете использовать подзапрос:

books = Book.where(id: Book.select('MAX(id) AS id').group(:user_id)).order(created_at: :desc) 
+0

работает как шарм, спасибо! – Epigene

Смежные вопросы