С помощью "объединений" вы можете фильтровать результаты в соответствии со связанными моделями
Model.joins(:model2s => :model3).where('model3.label' => 'label')
Это создаст только при вызове БД, так что это очень эффективно.Но объединения могут создавать дубликаты, когда существует более одного пути от модели к модели3.Если это возможно, вам нужно добавить
Model.select("DISTINCT model.*").joins(:model2s => :model3).where('model3.label' => 'label')