Ugh, this looks pretty horrible.  I think we ran into a similar bug where 
DataObjectsAdapter's join logic was using back-to-front keys in many-to-many 
associations.  I remember chiming into the #datamapper channel at the time but 
don't recall what the outcome was (I think nobody was around).

The logic in DataObjectsAdapter is definitely back-to-front, but changing it 
seems to break other things.  From memory it was changed to be back-to-front at 
some point, presumably to "fix" some other obscure bug.

Hopefully somebody takes a look at this, as we'll certainly also run into it.

In the interim, you may wish to try using an explicit join model (i.e. has n, 
:sentence_words on each model, then has n, :sentences, :through => 
:sentence_words).


On 30/12/2011, at 6:50 AM, Adam Medveczky wrote:

> Hi!
> 
> If I have 2 models (Sentence, Word), which have a Many-to-Many
> relationship, and Word has a field 'word', the following query:
> 
> Sentence.all(:words => { :word => "Hello" })
> 
> Tries to match "sentences.id" to "words.id" (live example at
> http://pastebin.ca/2097242 ) :
> 
> SELECT "id", "text", "book_id"
> FROM "sentences"
> WHERE "id" IN
>    (SELECT "words"."id"    # Query result will be a single words.id,
> which will be used as sentence id
>     FROM "words"
>     INNER JOIN "sentence_words" ON "words"."id" =
> "sentence_words"."word_id"
>     INNER JOIN "sentences" ON "sentence_words"."sentence_id" =
> "sentences"."id"
>     WHERE "words"."word" = 'Hello')
> ORDER BY "id"
> 
> Note that I haven't even heard of DataMapper until today, so I might
> doing something bad, but this seems to be definiately wrong (the inner
> query should be SELECT "sentences"."id" FROM "words" INNER JOIN...).
> 
> Thanks!
> 
> Adam
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "DataMapper" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/datamapper?hl=en.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"DataMapper" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/datamapper?hl=en.

Reply via email to