No, its indeed professores, its in portuguese. Not the english word
professors.

The datamapper naming conventions dont work well with foreign models. :P

2011/4/21 simonhn <[email protected]>

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

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