Области предназначены для компоновки, что означает, что вы можете комбинировать их, и это эффективно применяет все условия.В этом случае ActiveRecord слишком наивен, чтобы определить, что явное условие должно отменять первое.Он просто строит запрос, объединяя все предложения с AND.По этой причине в default_scope больше всего полезностей с предложениями: order, которые нельзя компоновать (в любом случае в реализации ActiveRecord 2.3).Здесь обсуждается здесь .
Также обратите внимание, что в Rails 3 ActiveRecord использует Arel для построения большого количества запросов, что значительно увеличит мощность генерации запросов ActiveRecord.упрощая много внутреннего.Вполне вероятно, что с Арелом улучшит вашу ситуацию.Тем временем я рекомендую не помещать условия в default_scope, если нет строк, которые вы действительно хотите сделать невидимыми для вашего приложения Rails.