Are you spelling professors wrong in the second line below? Seems like
you have an 'e' too many.

Array.new Disciplina.all(Disciplina.professor_disciplinas.professor.id
=> 1 )
Array.new Disciplina.all(Disciplina.professores.id => 1 )

On Apr 21, 12:02 am, Israel Ben Guilherme Fonseca
<[email protected]> wrote:
> Can you be a bit more specific? I didnt get which child_key are you talking
> about (there's a plenty of them :))
>
> 2011/4/20 Jonathan Stott <[email protected]>
>
>
>
>
>
>
>
> > I'm not sure if this fixes the problem or not, but:
>
> > The :child_key is the child_key property, not the :child_key
> > property's field name.
>
> > Regards
> > Jon
>
> > On 20 April 2011 14:34, Israel Ben Guilherme Fonseca
> > <[email protected]> wrote:
> > > Hi everybody,
>
> > > I'm getting a problem with the many-to-many through relationship. I made
> > the
> > > "normal" version and the "through" version, and I thought that I would
> > get
> > > the same result, and thats not happening.
>
> > > Array.new Disciplina.all(Disciplina.professor_disciplinas.professor.id=> 1
> > > )
>
> > > Array.new Disciplina.all(Disciplina.professores.id => 1 )
>
> > > These instructions should mean the same, and make the same (or almost)
> > SQL.
>
> > > That's my code:
>
> > > #TABLES:
> > > #
> > > #disciplina
>
> > > #    id_disciplina,
> > > #    nome
>
> > > #professor
> > > #    id_professor
> > > #
> > > #professor_disciplina
>
> > > #    id_professor
> > > #    id_disciplina
>
> > > class Disciplina
> > >     include DataMapper::Resource
>
> > >     storage_names[:default] = "disciplina"
>
> > >     property :id,            Serial, :field => 'id_disciplina'
>
> > >     property :nome,          String
>
> > >     has n, :professor_disciplinas, 'ProfessorDisciplina', :child_key => [
> > > :id_disciplina ]
>
> > >     has n, :professores, 'Professor', :through => :professor_disciplinas,
> > > :via => :professor
>
> > > end
>
> > > class Professor
> > >     include DataMapper::Resource
>
> > >     storage_names[:default] = "professor"
>
> > >     property :id,            Serial, :field => 'id_professor'
>
> > >     has n, :professor_disciplinas, 'ProfessorDisciplina', :child_key => [
> > > :id_professor ]
>
> > >     has n, :disciplinas, :through => :professor_disciplinas
>
> > > end
>
> > > class ProfessorDisciplina
> > >         include DataMapper::Resource
>
> > >         storage_names[:default] = "professor_disciplina"
> > >         belongs_to :professor ,  'Professor' , :child_key => [
> > :id_professor
> > > ], :key => true
>
> > >         belongs_to :disciplina,  'Disciplina', :child_key => [
> > > :id_disciplina ], :key => true
>
> > > end
>
> > > # Nice SQL
> > > Array.new Disciplina.all(Disciplina.professor_disciplinas.professor.id=> 1
> > > )
>
> > > # Bad SQL (database error and weird stuff)
> > > Array.new Disciplina.all(Disciplina.professores.id => 1 )
>
> > > The generated SQL for each instruction:
>
> > > -- Nice SQL
> > > SELECT "disciplina"."id_disciplina", "disciplina"."nome"
> > > FROM "disciplina"
> > > INNER JOIN "professor_disciplina" ON "disciplina"."id_disciplina" =
> > > "professor_disciplina"."id_disciplina"
> > > INNER JOIN "professor" ON "professor_disciplina"."id_professor" =
> > > "professor"."id_professor"
> > > WHERE "professor"."id_professor" = 1
> > > GROUP BY "disciplina"."id_disciplina", "disciplina"."nome" ORDER BY
> > > "disciplina"."id_disciplina"
>
> > > -- Bad SQL
> > > SELECT "disciplina"."id_disciplina", "disciplina"."nome"
> > > FROM "disciplina"
> > > INNER JOIN "professor_disciplina" ON "disciplina"."id_professor" =
> > > "professor_disciplina"."id_professor" -- should be
> > disciplina.id_disciplina
> > > INNER JOIN "professor_disciplina" "professor_disciplina_1" ON
> > > "professor_disciplina"."id_disciplina" =
> > > "professor_disciplina_1"."id_disciplina" -- why another join?
> > > INNER JOIN "professor" ON "professor_disciplina_1"."id_professor" =
> > > "professor"."id_professor"
> > > WHERE "professor"."id_professor" = 1
> > > GROUP BY "disciplina"."id_disciplina", "disciplina"."nome"
> > > ORDER BY "disciplina"."id_disciplina"
>
> > > The bad SQL got a weird join and is using a wrong id.
>
> > > What am I doing wrong? I think that maybe it's something with the :via
> > > option.
>
> > > Thanks in advance,
>
> > > ------------------------------------------------------
> > > Syntax Highlighted version of the code:
>
> > > Ruby Code
> > >http://dpaste.com/533933/
>
> > > Generated SQL
> > >http://dpaste.com/533934/
>
> > > --
> > > 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.

-- 
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