Na blogu glu.ttono.us znalazłem artykuł, w którym autor pisze, czego jego zdaniem nie powinno się robić podczas kodzenia w railsach. Z większością rzeczy się zgadzam, ale jest jeden punkt, do którego nie jestem w stanie się ustosunkować
[quote]Putting Controllers in Namespaces
This is really more trouble than it’s worth. You run into all sorts of crazy errors if you do this and you’ll be confused and frustrated. You’ll then ask other people about it and they’ll either blow you off for using namespaces with controllers or procede to get confused and frustrated as well. Then you’ll say, “I with I had listened to Kevin and Chris”. If you want /admin/some_controller as an URL that’s fine. Use the routing that’s built into rails.[/quote]
Z jednej strony czasami potrafią wyskakiwać różne dziwne errory, jeżeli nie wie się jak ustawić wszystko w pliku routes (przy używaniu link_to i url_for), ale używam katalogu admin/ w prawie każdej aplikacji i oprócz tego nie zauważyłem żadnych błędów. A to też jest kwestia obczajenia jak to wszystko dobrze zapisać.
No i teraz właściwe pytanie: co uważacie na ten temat?
Ja co prawda jestem niedzielnym programistą (z czego Rails to cirka 60% czasu), ale w mojej aplikacji (wewnętrzna aplikacja na potrzeby mojej firmy) jest też [color=blue]"/admin/…"[/color] (używane tylko przeze mnie) zrobione poprzez namespace. Jak dotąd problem tajemniczy wystąpił jeden, mianowicie przy użyciu tricku z [color=blue]:jumpto[/color] (zaczerpnięte z książki “Agile…”, mam nadzieję, że wiadomo o który trick chodzi) muszę ręcznie dodawać [color=blue]"/"[/color] na początku zapamiętywanej ścieżki.
def store_return_params
tempjump = request.parameters.clone # klonujemy, żeby nie zmieniać request.parameters, tylko naszą kopię
tempjump[:controller] = '/' + tempjump[:controller] # TUTAJ
session[:jumpto] = tempjump
end
O ten slash właśnie mi chodziło przy “problemach z link_to”
Gdy dana metoda jest wykonywana w kontrolerze w katalogu admin na przykład i podamy tylko samą nazwę kontrolera, to railsy myślą, że chodzi nam o inną akcję w tym samym namespace’ie (w tym wypadku admin). Ale tutaj wystarczy pamiętać o tym gdy wywołujemy kontrolery w katalogu wyżej i nie ma problemów
update: a w tym konkretnym przypadku dochodzi jeszcze możliwość “doklejenia” kontrolera, przez co po zaaplikowaniu parametrów z jumpto wyjdzie: admin/admin/controller. ale co do tego pewien nie jestem
Dość zagadkowe podejście. Muszę przyznać ze takiej konstrukcji namespaceów wręcz nadużywam. I oprócz wymienionego problemu(?) nie spotkałem się z żadnym innym. A o zaletach chyba nie ma co mówić, każdy je widzi.
Nie zgadzam sie z ta tezą, a wręcz zachęcam do korzystania.