Rails 3.2:如何从一系列儿童中找到所有父母

时间:2013-01-18 09:16:47

标签: ruby ruby-on-rails-3 associations parent-child

鉴于“书籍”的集合,找到所有“作者”(没有重复)的最佳方式是什么?

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

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

有没有更好的方法呢?

2 个答案:

答案 0 :(得分:1)

这是一种方式:

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

说明:

  • include会热切地加载作者,这样每次一本书想要它的作者时,你都不会得到可怕的O(n)db调用......
  • uniq删除重复的作者(在这种情况下你可能想使用inverse_of选项不确定)

答案 1 :(得分:0)

@books.each.collect(&:author)

或只是简单地说:

@books.collect(&:author)

您可以阅读有关收集here

的更多信息