Modele w podfolderach

Witam

Czy jest możliwość trzymania części modeli w jakimś podfolderze?
Chciałbym, przenieść część z nich np do /models/jakis_folder/

Da się to zrobić w jakiś prosty sposób? Używam Rails3

Pozdrawiam

Da się.

Generalnie podkatalogi (zgodnie z konwencją) służą do trzymania plików z klasami lub modułami wewnątrz przestrzeni nazw.

Czyli np. do models/shop/cośtam.rb wrzucasz klasę lub moduł Shop::Cośtam. Podobnie jak namespace’owanie kontrolerów.

Gorzej jeśli stała “Shop” jest klasą - taka sytuacja powoduje czasem powstawanie dziwnych problemów w Railsach.

Kolega zapytał czy “da się”, a nie “czy to dobry pomysł” :wink:

Problemy z namespace’owaniem kontrolerów i kolizją nazw (klasa vs. namespace) miałem tylko przy kontrolerach. A nawet nie przy nich, tylko przy ścieżkach.

Poprostu przyda mi się takie rozwiązanie, ponieważ w mojej aplikacji będzie 30+ powiedzmy modułów, i każdy z nich będzie mieć swój model, więc uznałem, że dobrze by było te moduły upchnąć do jednego folderu dla przejrzystości

[quote=Sevin]Chciałbym, przenieść część z nich np do /models/jakis_folder/
Da się to zrobić w jakiś prosty sposób? Używam Rails3[/quote]
Hej,

Musisz dodac “jakis_folder” do config.load_paths
Problemem w takim podejsciu (podzial na podkatalogi) moze byc to, ze gdy zdefiniujesz klase po kawalku w roznych katalogach, autoloader moze jej nie wgrac w odpowiedni sposob, da sie to jednak wymusic dodajac reczny require w application.rb

Podejscie takie zby ladne nie jest, czy przydatne? Teoretycznie jesli mialbys baardzo duzy obiekt moglbys sie np. uprzec zeby rozdzielic czesci zwiazane z jego fizyczna zaleznascia od bazy z jego logicznym dzialaniem, choc praktycznie prawie zawsze taki ogromny obiekt to obiekt probojacy robic zbyt wiele.

W kazdym razie: tak da sie to zrobic dosc latwo dodajac podkatalog w application.rb do config.load_paths

Pozdrawiam,

Nie lepiej te “moduły” zrobić jako Rails Engines, czyli osobne pod-aplikacje? W Railsach 3.1 dostaniesz do tego właśnie ładny namespacing. Drogomir, opowiesz koledze? :wink:

Chętnie się dowiem jak tego użyć w praktyce :slight_smile:

Jak to ma być część aplikacji, to nie wiem czy na tym etapie jest sens to wrzucać jako engine. Dodatkowo wszystkie rzeczy, które robiłem dla namespace’ów mają pomóc w zrobieniu niezależnej montowalnej aplikacji. W tym wypadku jeżeli już wyrzucać to do engine’u to raczej “dzielonego”.

Sevin:
Mógłbyś podać na jakimś przykładzie co to będą za moduły? Czy będą to jakieś konkretne funkcjonalności, czy po prostu chciałeś jakoś pogrupować modele?

Będą to konkretne funkcjonalności jak np. galeria zdjęć, system newsów, lista userów itd.
Aktualnie każdy taki moduł skłąda się z jednego Cella (gem Cells) oraz modelu który go obsługuje. I działa to dobrze, tylko chciałem jakoś pogrupować te modele tych modułów w jedno miejsce żeby nie robić takiego bałaganu.

@sevin

Popatrz na to:

ktoś nawet pytał o takie rozwiązanie ostatnio na forum…