Rails查询通过仅限于唯一关联对象的关联?

时间:2015-06-10 08:22:07

标签: sql ruby-on-rails-4 activerecord

class User 
has_many :books

我需要一个返回的查询:

属于独特用户的三本最新书籍。即如果我的数据库有

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

我希望查询返回ID为[3,5,6]的图书,因为它们是每个用户的最后一本书。

到目前为止我已经

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

占位符.where是实际困难部分发生的地方。

我知道我可以使用ruby循环返回所需的对象,但也许有一个范围友好的解决方案?

1 个答案:

答案 0 :(得分:0)

您可以使用子查询:

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