I have opened an issue for this: 
https://github.com/datamapper/dm-do-adapter/issues/11

Unfortunately I'm just learning ruby as well, DM internals are a bit
of mistery for me, so I did not get far.

Sentence_Words is generated automatically even if ':through =>
Resource' is specified, so without modificating the original code this
workaround is OK:

Sentence.all(:sentence_words => { :word_id => Word.first(:fields =>
[:id], :word => "Hello").id} )

On Dec 30, 1:05 am, Chris Corbyn <[email protected]> wrote:
> 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 
> > athttp://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