Scopes son sobre la generación de lógica de consulta utilizando Arel. Si no puede representar la lógica del completo? método en SQL, entonces está atascado
Los alcances - en rieles 3 al menos - están destinados a encadenar la lógica de consulta sin devolver un conjunto de resultados. Si necesita un conjunto de resultados que hacer sus pruebas para completa que necesita para hacer algo como
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
O si necesita más flexibilidad
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)
enviar Tal vez en un lambda que contiene la completa? lógica como un parámetro para el alcance lambda? – Zabba