Forum: Rails Germany Gesucht: Maschinen-freundlicher Condition Builder

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Michael S. (Guest)
on 2009-04-06 23:43
(Received via mailing list)
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:removed_email_address@domain.invalid
http://www.schuerig.de/michael/
Manuel W. (Guest)
on 2009-04-07 01:15
(Received via mailing list)
öhm wenn das so komplex ist, kannst du doch gleich sql erzeugen lassen
und mit find_sql arbeiten und musst nicht den umweg über AR nehmen...

gruß
manuel

Am 06.04.2009 um 21:43 schrieb Michael S.:
Michael S. (Guest)
on 2009-04-07 01:31
(Received via mailing list)
On Monday 06 April 2009, Manuel W. wrote:
> öhm wenn das so komplex ist, kannst du doch gleich sql erzeugen
> lassen und mit find_sql arbeiten und musst nicht den umweg über AR
> nehmen...

Das kommt aber vom UI. Wer soll da individuell das SQL für schreiben?

Michael

--
Michael S.
mailto:removed_email_address@domain.invalid
http://www.schuerig.de/michael/
Manuel W. (Guest)
on 2009-04-07 01:59
(Received via mailing list)
du kannst doch aus deiner eigenen query spezifikation:
[
  { :property => 'lastname', :operator => '=', :target => 'Schmidt' },
  { :property => 'children.firstname', :operator => 'LIKE',
    :target => 'P* },
  { :property => 'children', :aspect => 'count', :operator => '>',
    :target => 2 }
]

irgendwie sql bauen? oder verstehe ich hier was falsch?

gruß
manuel

Am 06.04.2009 um 23:30 schrieb Michael S.:
Michael S. (Guest)
on 2009-04-07 04:26
(Received via mailing list)
On Monday 06 April 2009, Manuel W. wrote:
>
> ]
>
> irgendwie sql bauen? oder verstehe ich hier was falsch?

Ja: Ich wollte mit meiner Frage herausfinden, ob mir schon jemand einen
Teil der Arbeit abgenommen hat.

Michael

--
Michael S.
mailto:removed_email_address@domain.invalid
http://www.schuerig.de/michael/
This topic is locked and can not be replied to.