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.