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
I want to execute something like:
application = Application.with_pending_docs.find(100)
application.documents.each{ |document|
# do something with pending docs
}
I can do this operation separately, but that fires additional queries, like:
application = Application.includes(:documents).find(100) #(2 queries)
docs = application.documents.status_pending #(+1 query)
I can do this for single records , but it's wont serve the purpose (single+multiple records query):
application = Application.find(100).documents.status_pending
There is concern of running into N+1 query issue while working on multiple applications, so want to get it done in one go
Maybe, I am missing minor syntax or formatting, but haven't been able to find anything related using google search
Ruby : 2.4.1 Rails : 5.1.0