0

我正在使用附件gem (1.3.0) 来管理我的 rails 3 应用程序中的文件。假设附件绑定到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 回答