Jest model Survey który ma wiele Pages a jedna Page ma wiele Questions. Dodatkowo jedno lub kilka Questions na danej Page może ale nie musi należeć do Group. Jak to lepiej powiązac:
a) w modelu Question dac group_id mimo że często będzie ono null
b) zrobić tabele QuestionsGroups/GroupsQuestions (jest jakaś konwencja kolejności w nazwie ?) i tam mieć te powiązania
Wydaje mi się, to zależy czy jedno pytanie może należeć do wielu grup?
a) Nie, wtedy Question ma group_id (czasem puste)
b) Tak, wtedy tworzysz QuestionsGroups/GroupsQuestions (czy jak to się tam zwie)
Dzięki. Pytanie zawsze należy do strony. Pytanie zawsze należy do jednej grupy, albo nie należy do żadnej grupy.
[code]class Survey < ActiveRecord::Base
has_many :pages
end
class Page < ActiveRecord::Base
belongs_to :survey # w bazie page.survey_id, not null
has_many :questions
end
class Question < ActiveRecord::Base
belongs_to :page # w bazie question.page_id, not null (?)
belongs_to :group # w bazie question.group_id, może być null
end
class Group < ActiveRecord::Base
has_many :questions
end[/code]
Tak to powinno wyglądać.
Taka tabela (bez id, tylko z polami question_id i group_id) byłaby dobra, gdybyśmy mieli relację has_and_belongs_to_many (habtm), czyli pytanie może należeć do wielu grup i jednocześnie grupa może mieć wiele pytań.
Jeśli chodzi o konwencję nazewnictwa - Railsy domyślnie spodziewałyby się wtedy nazwy tabeli groups_questions (liczby mnogie, alfabetycznie). Ale można też nazwać tabelę po swojemu przekazując jej nazwę w opcji :join_table przy definicji asocjacji habtm.
Dzięki, dokładnie tak to rozplanowałem.