Witam. Wiem, że są toturiale oraz oficjalna dokumentacja na temat routes i namespace, jednak nie mogę zrozumieć ich działania. Czy ktoś może dobitnie mi to wytłumaczyć?
I podać przykład?
Jestem początkująca, nauka mi idzie ale na tym ewidentnie stanęłam i nie rozumiem. Proszę o wyrozumiałość
Masz na przykład artykuły, czyli pliki:
app/controllers/articles_controler.rb
app/models/article.rb
app/views/articles/index.html.erb
app/views/articles/show.html.erb
W pliku routes.rb masz coś w rodzaju
resources :articles
Rails będzie przekierowywać adresy /articles
, /articles/new
, /articles/123
itd. do odpowiednich akcji w kontrolerach automatycznie, bo to załatwia metoda resources
.
Ale na przykład chcesz, żeby admini i zwykli userzy mieli inaczej wyświetlane artykuły. Żeby nie wymyślać nowych nazw i żeby uniknąć kombinowania w controllerach i widokach, używasz namespace, czyli jakby prefiksu, który sprawia, że możesz po prefiksie użyć nazwy, która już występuje i jest przypisana do innej rzeczy.
Teraz jak dodasz
namespace :admin do
resources :articles
end
wtedy będą przekierowywane adresy /admin/articles
, admin/articles/new
itd. po prostu z “admin/” przed całą resztą. I będą one przekierowywane nie do ArticlesController, jak poprzednie, ale do kontrolera Admin::ArticlesController. A to jest całkowicie inny kontroler, chociaż ma podobną nazwę.
Ten kontroler wg konwencji powinien być w
app/controllers/admin/articles_controller.rb
i będzie klasy Admin::ArticlesController, pierwsza linia kodu to będzie
class Admin::ArticlesController < ApplicationController
Pozmieniają się też helpery “path” czyli zamiast edit_article_path(article)
będzie edit_admin_article_path(article)
i tak dalej.
Pliki widoków również będą domyślnie szukane w podkatalogu “admin”, czyli
app/views/admin/articles/index.html.erb
app/views/admin/articles/show.html.erb
Dzięki temu masz teraz dwie osobne wersje stron dla artykułów. W zależności czy adres będzie /admin/articles
czy /articles
.
Dziękuję!
Pewnie i niejednej zbłąkanej duszyczce to tłumaczenie rozwiąże wątpliwości