To mój pierwszy post na tym forum, więc witam wszystkich serdecznie!
Z Railsem (wersja 3) zacząłem swoją przygodę stosunkowo niedawno, trochę rzeczy już wiem ale jeszcze dużo przede mną.
Mam przed sobą następujący problem: muszę stworzyć system, w którym istnieją 3 typy użytkowników: administrator, recepcja, pracownik. Uwierzytelnianie użytkownika odbywa się za pomocą AuthLogica, autoryzacja za pomocą Cancana. Relacje między typami użytkowników wyglądają tak: administrator ma wielu recepcji, recepcja ma wielu pracowników (dodatkową kwestią jest, że recepcja musi mieć dostęp do niektórych obiektów, które są powiązane z pracownikiem, czyli np.
[code]#Reception.rb
has_many :workers
has_many :events
has_many :events, :through => :workers
#Worker.rb
belongs_to :reception
has_many :events
#Event.rb
belongs_to :worker
belongs_to :reception[/code]
jak widzicie recepcja może mieć również swoje własne eventy i sprawa zaczyna się zaciemniać). Dodatkowym utrudnieniem w całej sytuacji jest to, że recepcja musi mieć dodatkowe atrybuty, które nie wchodzą w skład atrybutów administratora i pracownika - co wiążę się z utrudnioną budową formularzy i bazy. Miałem zamiar całość zrobić w taki sposób, żeby Administrator, Reception i Worker, dziedziczyły z klasy User, za pomocą pola type. Pierwszym problemem, który mi się nasunął jest to, że nie mogę wtedy stworzyć dla recepcji oddzielnej tabeli z dodatkowymi atrybutami, które musi posiadać (kiedy spróbowałem to zrobić pola z tabeli reception, dla obiektu reception są niewidoczne undefined method `nazwa_pola’ for #Reception:0x4281048). Cóż mógłbym na siłę dodać te pola do tabeli User i wykorzystywać tylko dla użytkowników typu recepcja (co myślicie na temat takiego rozwiązania?). Drugą kwestią jest to, że czytałem o problemach, które wiążą się z dziedziczeniem i relacjami między obiektami, który dziedziczą tą samą klasę (ktoś mógłby to potwierdzić, czy faktycznie jest lepiej tego nie robić? sam nie miałem jeszcze czasu aby sprawdzić to w praktyce).
Drugim rozwiązaniem, które przychodzi mi do głowy jest stworzenie tabel administrator, reception i worker, z odpowiednimi dla nich polami które są w relacji z tabelą User.
#User.rb
has_one :administrator
has_one :reception
has_one :worker
Jednak te rozwiązanie wydaje się mało sympatyczne z perspektywy kontrolera, w którym musiałyby się mieszać obiekty typów użytkownika z obiektem User.
Mam mały zamęt w głowie, z racji tego, że nigdy nie mierzyłem się z takim problemem, więc proszę wszystkich, którzy mają doświadczenie w tej kwestii, lub po prostu wiedzą jakim schematem postępowania, należy to rozwiązać, o pomoc lub linki do materiałów z takową. Z góry dziękuję za odpowiedzi!