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.
