Der Code so geht:Sequel fügen Sie einen ‚Umfang‘ nach einer bedingten
class Foo < Sequel::Model
self.dataset_module do
def property_active
where('properties @> \'{"active": true}\'')
end
end
end
class Bar
def foo_ids
Foo.select(:other_model_id).distinct.all
end
def condition?
...
end
end
ich die foo_ids
Methode ändern möchten o der condition?
Methode den Umfang property_active
hinzufügen abhängig. Bisher komme ich mit auf den Punkt:
Foo.select(:other_model_id).where{ Foo.property_active if condition? }.distinct
Und es gibt:
# when condition? is true
=> "SELECT DISTINCT \"other_model_id\" FROM \"foos\" WHERE (SELECT * FROM \"foos\" WHERE (properties @> '{\"active\": true}'))"
# when condition? is false
=> "SELECT DISTINCT \"other_model_id\" FROM \"foos\""
Der Code ist gut, aber ich weiß nicht, wie die Idee, dass SELECT
nach dem WHERE
, gibt es eine Möglichkeit, eine nette Abfrage für den true
Fall zurückzugeben? so etwas wie:
"SELECT DISTINCT \"other_model_id\" FROM \"foos\" WHERE (properties @> '{\"active\": true}')"
Dies funktioniert, hoffentlich gibt es einen Sequel Weg, es zu tun. – zetacu
@zetacu Nicht sicher, was Sie suchen, das ist anders. Der Kompositionsstil, den ich verwendet habe, wird auch in der [Einführung in Sequel] (https://github.com/jeremyevans/sequel#an-introduction) verwendet. – coreyward
Ich habe gesucht, ob es eine Art Sequel-Methode gibt, um Abfragen in eine zu verschachteln, wie 'Model.query.conditional_query.query' etwas wie' Foo.where (bar: 'somethig'). Some_conditional_restriction_sequel_method.where (foo: 'something ') .all' auf diese Weise kann ich es in eine funktionalere Programmierung hinzufügen, ich glaube, die einzige Möglichkeit, etwas wie das zu tun wird ein Oszilloskop hinzufügen, aber hüpfte, dass die Fortsetzung bereits das eingebaut hat. – zetacu