Rails 3.2:如何从一组孩子中找到所有的父母



给定一个"图书"集合,找到所有"作者"(无重复(的最佳方法是什么?

假设我们有一个经典的关联:

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)

您可以在这里阅读更多关于收集的信息

相关内容

  • 没有找到相关文章

最新更新