4

给定一组“书籍”,找到所有“作者”(不重复)的最佳方法是什么?

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

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))

有没有更好的方法呢?

4

2 回答 2

1

这是一种方法:

@books = Book.where("some condition").includes(:author)
@authors = @books.map(&:author).compact.uniq

解释 :

  • include 将急切加载作者,因此每次一本书想要其作者时,您都不会害怕 O(n) db 调用...
  • uniq 删除重复的作者(在这种情况下你可能想使用 inverse_of 选项不确定)
于 2013-01-18T09:52:21.317 回答
0
@books.each.collect(&:author)

或者只是简单地:

@books.collect(&:author)

您可以在此处阅读有关收集的更多信息

于 2013-01-18T09:34:23.357 回答