У меня есть запрос как это:
answer_histories = History.where(slide_id: self.slide_id)
.joins(:material_progress).where(material_progresses: {site_id: site.id})
Я бы сделал что-то вроде:
class LearningHistory < ApplicationRecord
...
scope :completed, ->{ where.not(completed_at: nil) }
Затем:
answer_histories = AnswerHistory.where(slide_id: self.slide_id)
.joins(:material_progress).where(material_progresses: {site_id: site.id})
.joins(:learning_history)
.merge(LearningHistory.completed)
.where(MaterialProgress.arel_table[:learning_history_id]
.eq(AnswerHistory.arel_table[:learning_history_id]))