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 に答える