При записи как
scope :min_2_items_last_90_days, where(...)
синтаксически правильно, вероятно (как и ваш исходный код) не совсем то, что вы думаете.
В обоих случаях 90.days.ago
оценивается только один раз, когда загружается класс, поэтому 90 дней всегда будут 90 днями до последнего перезапуска приложения. Если вы не перезагружали свое приложение в течение 10 дней, вы бы действительно смотрели на материалы, созданные за последние 100 дней. Вы не заметите этого в процессе разработки, потому что ваш исходный код постоянно перезагружается (и, следовательно, 90.days
переоценивается).
Вместо этого вы должны сделать
scope :min_2_items_last_90_days, lambda { where('orders.created_at >= ?', 90.days.ago).includes(...) ... }
, который гарантирует, что условия будут переоцениваться при каждом использовании области действия.