Области предназначены для генерации логики запросов с использованием ARel.Если вы не можете представить логику полного?метод в SQL, то вы как бы застряли
Области - по крайней мере в рельсах 3 - предназначены для объединения логики запроса без возврата набора результатов.Если вам нужен набор результатов для полного тестирования, вам нужно сделать что-то вроде
class MyModel < ActiveRecord::Base
scope :public, lambda{ where ({:public => true}) }
def self.completed_public_records
MyModel.public.all.select { |r| r.completed? }
end
end
# elsewhere
MyModel.completed_public_records
или если вам нужна большая гибкость
class MyModel < ActiveRecord::Base
scope :public, lambda{ where ({:public => true}) }
# some other scopes etc
def self.completed_filter(finder_obj)
unless finder_obj.is_a?(ActiveRecord::Relation)
raise ArgumentError, "An ActiveRecord::Relation object is required"
end
finder_obj.all.select { |r| r.completed? }
end
end
# elsewhere
MyModel.completed_filter(MyModel.public.another_scope.some_other_scope)