2013-03-13 12 views
6

Nie udało mi się dobrze wyrazić słowami (w tytule pytania), co staram się zrobić, więc na cześć powiedzenia, że ​​obraz jest wart tysiąca słów; W skrócie, co próbuję zrobić, to ..Jak zaprojektować/modelować ma wiele relacji, które mają znaczącą tabelę dołączeń?

enter image description here

Zasadniczo, co mam jest Nauczyciel ma wiele Nominacje i Student ma wiele Nominacje co w przybliżeniu przekłada się na:

enter image description here

staram się trzymać z dala od użyciu has_and_belongs_to_many makro, bo moja spotkań model ma pewne znaczenie (operacje), na przykład ma pole Boole'a: potwierdzone.

Tak więc, myślałem o używaniu makra has_many: through i być może przy użyciu modelu tabeli dołączania "Mapping"? Co wy myślicie?

Scenariusz, który próbuję zakodować, jest prosty;

  1. Student prosi o spotkanie z nauczycielem w pewnym Date/Time
  2. Jeśli nauczyciel jest dostępny (i chce dać nauczkę w tym Date/Time), Ona potwierdza termin.

Mam nadzieję, że możesz mi powiedzieć, jak podszedłbyś do tego problemu? Czy moje założenie o użyciu has_many: poprzez makro poprawne?

Dziękujemy!

+4

+1 za diagramy! Twój problem jest podobny do [ten w przewodniku po prowadnicach] (http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association) o skojarzeniach 'has_many: through'. – sergelerator

+0

Chcesz jednego spotkania mieć wielu uczniów i wielu nauczycieli? – deefour

+1

'has_many: though' jest właściwym podejściem do tego. – PinnyM

Odpowiedz

1

Zarówno nauczyciele, jak i uczniowie mogą dziedziczyć z jednej klasy, np. Osoba. Następnie utwórz powiązanie między osobą a spotkaniami. W ten sposób zachowujesz otwartą architekturę, więc jeśli w przyszłości chcesz dodać "Rodziców", mogą one łatwo zostać zintegrowane i mogą uczestniczyć w spotkaniach.

Może nie być całkiem proste, jak zrobić zajęcia z zajęciami dla dzieci (uczniowie, rodzice, nauczyciele). Może to dotyczyć polimorficznych związków, których nie lubię szczególnie. Powinieneś jednak uciec z jednym stołem do łączenia.

W każdym przypadku chcesz zaprojektować, aby Twój system mógł zostać przedłużony. Niektóre dodatkowe prace na wczesnym etapie zaoszczędzą ci dużo pracy później.

+0

Właściwie to dobry komentarz, a dobrą wiadomością jest to, że mam już implementację, o której wspomniałeś w swoim miejscu :) Moja klasa rodzicielska to Użytkownik (a jej dziećmi są oczywiście: Uczeń i Nauczyciel) – jlstr

Powiązane problemy