Scopes sollen zusammensetzbar sein, d.h. man kann eine Reihe von ihnen kombinieren und es werden alle Bedingungen angewendet. In diesem Fall ist ActiveRecord einfach zu naiv, um festzustellen, dass die explizite Bedingung die erste negieren sollte. Es erstellt einfach die Abfrage, indem es alle Klauseln mit ANDs verknüpft. Aus diesem Grund hat default_scope den größten Nutzen mit den :order-Klauseln, die nicht zusammensetzbar sind (in der Implementierung von ActiveRecord 2.3 jedenfalls). Es gibt eine weitere Diskussion aquí .
Beachten Sie auch, dass in Rails 3 ActiveRecord mit Arel für einen Großteil der Abfragekonstruktion, was die Leistungsfähigkeit der ActiveRecord-Abfragegenerierung erheblich steigert und gleichzeitig einen Großteil der Interna vereinfacht. Es ist wahrscheinlich, dass sich Ihre Situation mit Arel verbessern wird. In der Zwischenzeit empfehle ich, keine Bedingungen in ein default_scope zu setzen, es sei denn, es gibt Zeilen, die für die Rails-App wirklich unsichtbar sein sollen.