ruby on rails 如何从中获取最新记录有很多关系

Joa*_*nna 5 ruby ruby-on-rails has-many

我是 Ruby on Rails 的新手。我有一个问题 - 如何从模型中的许多关系中只获取最新记录。我的代码是这样的:

class User < ActiveRecord::Base 
  has_many :books
end

class Book < ActiveRecord::Base
  belongs_to :user

  scope :rating, -> { where(rating: 5) }
end
Run Code Online (Sandbox Code Playgroud)

我想实现的是:我想为每个用户获取所有最新(最后)一本书,而不是使用范围评级过滤这本书。我可以使用每个循环来执行此操作(通过 User.books 循环并获取 book.last) - 但这非常低效,因为我有很多数据。你有什么想法我怎么能做到这一点?也许某种范围相互链接?

SHS*_*SHS 3

如果你想避免编写 SQL,你可以这样做:

class Book < ActiveRecord::Base
  scope :latest, -> do
    book_ids_hash = Book.group(:user_id).maximum(:id)
    book_ids = book_ids_hash.values
    where(id: book_ids)
  end
end
Run Code Online (Sandbox Code Playgroud)

那么你所要做的就是:

Book.rating.latest
Run Code Online (Sandbox Code Playgroud)