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) - 但这非常低效,因为我有很多数据。你有什么想法我怎么能做到这一点?也许某种范围相互链接?
如果你想避免编写 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)
| 归档时间: |
|
| 查看次数: |
3287 次 |
| 最近记录: |