0

Rails 3 アプリケーションでファイルを管理するためにattachinary gem (1.3.0) を使用しています。attachinary が次のBusinessようなモデルにバインドされていると仮定します

class Business < ActiveRecord::Base
  has_attachment :logo
end

ページで 30 個までのビジネス インスタンスをレンダリングしています。アプリを最適化しているときに、business.logo呼び出しごとに新しいデータベース クエリが作成されることに気付きました。そのため、ロゴごとに 30 個までの追加のクエリが作成されます。ビジネス クエリにロゴを含めようとしたとき、logo実際には関係がないため失敗しました。

Business.includes(:logo) # failed

クエリへの関係として添付ファイルを含めるにはどうすればよいですか?

4

1 に答える 1

1

attachinary はリレーションを内部的に定義し、それを人間が読める形にラップするだけですhas_attachmentand has_attachments. 実際に行うことは次のとおりです(コードはこちら):

relation = "#{options[:singular]}_files"

元の関係にアクセスしてlogo_files、次のようにクエリに追加できます。

Business.includes(:logo_files)

余分なクエリは作成されず、すべてのエントリがクエリに結合されます。インスタンスからは、次のように引き続きアクセスできますlogo

business.logo
于 2014-05-26T20:46:21.993 に答える