Ich suche ein Plugin/Gem, das aus einer Maschinen-freundlichen
Query-Spezifikation für AR#find die :condition- und :include-Parameter
baut. Es gibt eine übergroße Auswahl an Plugins, die dies aus einer
Menschen-freundlichen Repräsentation tun. Sieht alles schön aus, hilft
aber wenig dabei, eine Query-Spezifikation, die vom Client kommt, in
etwas AR-taugliches umzuwandeln.
Die genaue Form der Query-Spezifikation habe ich noch nicht festgelegt,
sie könnte aber so aussehen
[
{ :property => ‘lastname’, :operator => ‘=’, :target => ‘Schmidt’ },
{ :property => ‘children.firstname’, :operator => ‘LIKE’,
:target => 'P* },
{ :property => ‘children’, :aspect => ‘count’, :operator => ‘>’,
:target => 2 }
]
Das soll alle Leute finden, die mit Nachnamen ‘Schmidt’ heißen und mehr
als 2 Kinder haben, deren Vornamen mit ‘P’ beginnt.
In reinem ActiveRecord geschrieben, müßte das nur für die ersten beiden
Bedingungen aus dem Stehgreif so aussehen:
Person.find(:all, :include => :children,
:include => :children,
:conditions => [
“(lastname = ?) AND (firstname_children LIKE ?”,
‘Schmidt’, ‘P%’
]
)
Die dritte Bedingung läßt sich, glaube ich, gar nicht ohne beinahe
vollständig handgeschriebenes SQL ausdrücken, da :select ignoriert
wird, wenn :include vorkommt.
Ich überlege noch, ob die beste Lösung wäre, das Problem nach unten in
die Datenbank zu schieben und dort geeignete Views zu definieren. Das
würde die Kompexität für einen Query Builder deutlich verringern.
Ideen?
Michael
–
Michael S.
mailto:[email protected]
http://www.schuerig.de/michael/