给定一个"图书"集合,找到所有"作者"(无重复(的最佳方法是什么?
假设我们有一个经典的关联:
class Author < ActiveRecord::Base
has_many :books
end
class Book < ActiveRecord::Base
belongs_to :author
end
我现在的做法是:
@books = Book.where("some condition")
@authors = Author.where(:id => @books.map(&:author_id))
有更好的方法吗?
这里有一种方法:
@books = Book.where("some condition").includes(:author)
@authors = @books.map(&:author).compact.uniq
说明:
- include会急切地加载作者,这样你就不会在每次一本书想要它的作者时收到可怕的O(n(db调用
- uniq来删除重复的作者(在不确定的情况下,您可能需要使用inverse_of选项(
@books.each.collect(&:author)
或者简单地说:
@books.collect(&:author)
您可以在这里阅读更多关于收集的信息