Koncepcja budowania forum

Witam,
jestem w trakcie tworzenia aplikacji w Ruby On Rails. Doszedłem do momentu, w którym muszę napisać forum dyskusyjne. Jednak nie do końca wiem jak się za to zabrać (wiele lat w PHP robi swoje:D).
Skoro Rails jest architekturą REST-owską, wiem, że muszę dla każdego z “komponentów/tabeli” przypisać jeden controller, czyli: forum_categories, forum_threads oraz forum_posts. Jednak pozostaje kwestia tego, w jaki sposób połączyć to ze sobą i jak zbudować w pełni działające forum.
Jeśli dobrze rozumiem architekturę REST, powinienem stworzyć w routerze zależności między tymi controllerami, mianowicie(piszę schematycznie):

map.resource :forum_categories do |category| category.map :forum_threads do |thread| thread.map :forum_posts end end
Czy takie powiązanie jest dobre? Czy powinienem to rozwiązać w ten sposób?
Pozdrawiam, Mateusz

Każde rozwiązanie które spełni Twoje oczekiwania jest dobre :slight_smile:
Nie ma jednoznacznej odpowiedzi na to co jest dobre. Jeśli chcesz możesz to zrobić w zagnieżdżony sposób tak jak opisałeś. Możesz też użyć płaskiej struktury, np:

map.resources :forum_categories map.resources :forum_threads map.resources :forum_posts
Zaletą “płaskiej” struktury jest to, że nie musisz podczas generowania url’a (metody *_path i *_url) przekazywać za każdym razem wszystkich id (category_id, thread_id i post_id) tylko 1 id (to którego w danym przypadku potrzebujesz).

Zaletą zagnieżdżonej struktury jest np. lepsze SEO (jeśli użyjesz np. nazwy kategorii, wątków w url’ach w połączeniu z id) etc.

Najlepiej najpierw stworzyć sobie na papierze strukturę url’i jaką potrzebujesz a później dopiero zastanowić się jak zrobić to w Railsach.

Dobre jest sam tak mam, pisalem nie dawno forum od zera. Tylko wtedy w kontrolerze musisz sobie dac dodawtkowe zapytania do bazy by moc jak juz hosiawak pisal generowac urle

Ale dzial ok i spokojnie mozna to robic chodz czasem niezle combosy powstaja, unikal bym wlasnie wtedy przedrostkow forum, chodz ladne daja pozniej takie cuda

link_to ‘aaa’, forum_cate…forum_thre…forum…posts_url(@a,@b,@c), wiec troche tego jest, no ale czytelne.

Okej, teraz rozumiem.
Żeby nie zakładać nowego tematu, chciałem jeszcze zapytać o sposób zapisu komentarzy.
Przemyślałem wszystko i stworzyłem sobie jedną tabelę “comments” dla wszystkich obiektów na stronie. Schemat wygląda tak:

`comments`: comment_text comment_user_id (:belong_to :user) comment_object_id ( o tym niżej ) comment_object_type ( j/w)
Teraz sprawa wygląda tak, że potrzebuję napisać obsługę komentarzy w oparciu o ten schemat. Jednak sprawa komplikuje się, ponieważ te komentarze będą dla: utworów muzycznych, teledysków, podstron, newsów i paru innych drobiazgów.
System będzie identyfikował typ komentarza po object_type( 1 - news , 2 - site , 3- teledyski, 4 - tracks), itp. object_id to ID danego obiektu.

Wszystko byłoby pięknie gdybym teraz wiedzial jak zabrać się za napisanie tego kontrolera.
Do głowy przychodzą mi dwa pomysły:

Pierwszy to albo pobrać object_id i w jakiś sposób przekazać object_type do głównego controllera comment, który będzie zarządzał całością, a w logice będzie zawierał ify które odpowiednio będą dodawać komentarze w zależności od obiektu.

Drugi, bardziej (moim zdaniem) sensowny sposób to po prostu do każdego z kontrollerów (tracks, movies, news, sites) dodać metodę (przez :members) comment, która będzie sobie tym zarządzała.

Jakie jest wasze zdanie na ten temat.

Polymorhpic association

O proszę, świetne rozwiązanie, już zaimplementowałem i trochę dostosowałem pod siebie. Działa idealnie.
Dzięki serdecznie za pomoc;)