Hallo,
ich habe leider ein kleines Verständnis-Problem bei condition-Hashes für
ActiveRecord.
Ausgangssituation: 2 Models. Es gibt Person und ContactCombi. Eine ContactCombi
beschreibt eine Beziehung zwischen Persons.
Zwischen den jeweiligen Tabelle in der DB gibt es eine join-tablle. Es
existiert eine für Beziehung zwischen zwei (oder ggf. mehren) Persons
existieren also ein Eintrag für das Combi-Object, je ein Eintrag für jede
Person und je ein Eintrag für die Verknüpfung zwischen Person und Combi Objekt.
Model-Code:
class Person
has_and_belongs_to_many :contact_combies, :class_name => "ContactCombi"
end
class ContactCombi
has_and_belongs_to_many :persons
end
Nun möchte ich gerne die Abfrage formulieren:
Finde alle Kontakte, die mit Kontakt Luehr in Relation stehen.
Diese Anfrage formuliere ich so:
Person.find(:all, :conditions => {:contact_combies => {:persons => {:last_name
=> "Luehr"}}})
Auf SQL-Seite wird ausgeführt:
SELECT *
FROM `persons`
WHERE (`persons`.`last_name` = 'Luehr')
Eigentlich erwartet habe ich etwas wie (mal ein wenig verbose, aber hoffentlich
lesbar - AR macht ganz andere aliases *g*):
SELECT DISTINCT p2.*
FROM persons as p1 LEFT JOIN contact_combi_contacts ccc1 on p1.id =
ccc.person_id
LEFT JOIN contact_combi_contacts ccc2 on ccc1.contact_combi_id =
ccc2.contact_combi_id
LEFT JOIN persons as p2 ON ccc2.person_id = p2.id
WHERE p2.last_name = 'Luehr'
In Worten
- Selectiere die persons mit zugehörigen contact_combies (1. join)
- Ermittele dann die person_ids aller an diesen Combis beteiligten Personen (2.
join)
- Selectiere alle Persons daraus, filtere nach last_name. (3. join)
Insbesondere hätte ich beim Rails-Statement erwartet, dass die Bedingung
last_name für alle, in der Combi referenzierten Contacts gilt.
Was läuft hier verkehrt? Wie kann ich eine solche Abfrage stellen?
Danke,
Alles Gute
Jan
_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/listinfo/rubyonrails-ug