2017-07-25 11 views
0

モデルに対応するspace_idの属性を持つモデルBookingがあります。belongs_to :spaceです。別のモデルから何度も何度もレコードを取得するための最良の方法 - Rails

私は複数のスペースがあり、すべてのIDに関して各予約を数えたいと思います。

ファイアクエリを何度も何度も繰り返すことなく、DBからレコードを取得する最良の方法を知りたい。 現在、私はこのようにやっている:

spaces = Space.all 
result = [] 
spaces.each do |s| 
    result << s.as_json.merge(:bookings_counts=>s.bookings.count) 
end 

が、これは再びクエリを発射し、再びさはデシベルを形成します。これを行う最善の方法はありますか?

答えて

1

これは「N + 1クエリ」問題と呼ばれます。 Railsでは、熱心な読み込みを使って解決できます。あなたはここに

spaces = Space.eager_load(:bookings) 

にあなたのコードの最初の行を変更することにより、単一のクエリ内のレコードをロードするためにincludesを使用することができますRailsの中で積極的なロードを行う方法(includeseager_loadpreload)の良い説明との比較であるlink

関連する問題