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

Antwort per Email an