Asocjacje pomiędzy modelami user->projekt

Witam.
Rozrysowałem sobie taki oto model na szybko:

Każdy user moze miec klikanascie projektow. Tylko ten user je widzi. Projekt składa się z kilku modeli, które są widoczne z poziomu projektu. Jeżeli ktoś ma dostęp do modelu projekt, ma również dostęp do tych 3 podmodeli. Niestety jestem początkującym i przesiadłem się z C++ Qt QML i nigdy jeszcze nie projektowałem bazy danych. Niestety nie wiem czy ten model powinien tak wyglądać. Druga sprawa czy nie powinienem dać np dla Lista1 belongs_to :user , :throught=> Projekt. Jeżeli tak, to prosiłbym w sumie jak i kiedy używać through, bo niestety wyjaśnienie z doc’a railsów niewiele mi wyjaśniło. Nie wiem też jak zaimplementować usera, który ma dostęp do projektu, lecz nie może nic w nim edytować (tylko odczyt).
Mam nadzieję, że w miarę zrozumiale to napisałem i bardzo dziękuję za odpowiedzi.
Pozdrawiam.

“has_many x :through y” jest prawidłowym podejściem. potrzebujesz po prostu relacji “wiele do wielu”. Najłatwiej rozumieć tę relacje jako koszyk z zakupami. W twoim przypadku koszykiem jest “Projekt” poszczególnymi kupionymi przedmiotami są twoje moedele “Lista1”, “lista2” itd. Czyli wiele userów może w jednym projekcie miec dostep do wielu modeli, elementem łączącym (koszykiem) jest projekt. Mam nadzieję że nie zakręciłem za bardzo:)

Co do drugiego pytania wydaje mi się że możesz to rozwiązać z poziomu kontrolera.
Edit, Update, Destroy powinny zawierać walidacje która sprawdza przed metodą save() czy dany user ma uprawnienia by zapisywać/modyfikować.

Dopiero się uczę railsów ale mam nadzieję że pomogłem.

Co do uprawnień / autoryzacji polecam gem’a ‘CanCanCan’ - następca ‘CanCan’, który na chwilę obecną przestał być rozwijany.
W łatwy sposób będziesz mógł dodać uprawnienia do edycji / usuwania i reszty akcji, wszystko to w kontrolerze.
Do zrozumienia tego polecam świetny RailsCast: http://railscasts.com/episodes/192-authorization-with-cancan
Wszystko tam jest w dość przejrzysty sposób wyjaśnione oraz dodatkowo wiki ‘CanCanCan’ z przykładami:
https://github.com/CanCanCommunity/cancancan/wiki

A miałby ktoś dobry tekst o modelach ? Chodzi mi tu o ładne przykłady/różnice dla belongs_to, has_one, has_many, itd. Po prostu coś więcej niż w dokumentacji.
Pozdrawiam.

Poleciłbym Ci raczej jakieś podstawy baz relacyjnych i podstawowych zapytań select. Będzie Ci najłatwiej zrozumieć relacje między modelami. Poszukaj np na youtubie “sql for beginners”. Jeśli będziesz rozumiał jak się buduję prostą baze i jak wykonywać na nich zapytania, szybko załapiesz o co chodzi w modelach i jak je w przyszłości prawidłowo budować.