Anyone? 2011/4/21 Israel Ben Guilherme Fonseca <israel....@gmail.com>
> 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 <simo...@gmail.com> > >> 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 >> <israel....@gmail.com> 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 <jonathan.st...@gmail.com> >> > >> > >> > >> > >> > >> > >> > >> > > 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 >> > > <israel....@gmail.com> 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 datamapper@googlegroups.com. >> > > > To unsubscribe from this group, send email to >> > > > datamapper+unsubscr...@googlegroups.com. >> > > > 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 datamapper@googlegroups.com. >> > > To unsubscribe from this group, send email to >> > > datamapper+unsubscr...@googlegroups.com. >> > > 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 datamapper@googlegroups.com. >> To unsubscribe from this group, send email to >> datamapper+unsubscr...@googlegroups.com. >> 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 datamapper@googlegroups.com. > To unsubscribe from this group, send email to > datamapper+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/datamapper?hl=en. > -- Jean Michel Baldessar Msn: jean.baldes...@gmail.com 9976-4691 -- You received this message because you are subscribed to the Google Groups "DataMapper" group. To post to this group, send email to datamapper@googlegroups.com. To unsubscribe from this group, send email to datamapper+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/datamapper?hl=en.