【发布时间】:2020-07-20 15:04:50
【问题描述】:
class Application < ActiveRecord::Base
has_many :documents, class_name: DocumentTracker.name
scope :with_pending_docs, -> {
includes(:documents) {
# not able to use DocumentTracker's scope here
DocumentTracker.status_pending
}
}
#...
end
class DocumentTracker < ActiveRecord::Base
enum: status[:pending, :rejected, :accepted]
scope :status_pending, -> {
where(status: statuses[:pending])
}
}
#...
end
我想执行类似的操作:
application = Application.with_pending_docs.find(100)
application.documents.each{ |document|
# do something with pending docs
}
我可以单独执行此操作,但这会触发其他查询,例如:
application = Application.includes(:documents).find(100) #(2 queries)
docs = application.documents.status_pending #(+1 query)
我可以对单个记录执行此操作,但它不会达到目的(单个+多个记录查询):
application = Application.find(100).documents.status_pending
在处理多个应用程序时可能会遇到 N+1 查询问题,因此希望一次性完成
也许,我缺少次要语法或格式,但无法使用谷歌搜索找到任何相关内容
红宝石:2.4.1 导轨:5.1.0
【问题讨论】:
标签: ruby-on-rails ruby activerecord ruby-on-rails-5 rails-activerecord