Jak mogę zmienić domyślny routing dla pewnego zasobu? Tj. Mam Page, który ma m.in. kolumnę alias:string.
Chciałbym, aby stronę można było wyświetlić przez /:alias.
W routingu mam
resources :pages
match "/:alias" => "pages#show"
I działa pięknie : )
Jednakże, np. po edytowaniu Page przekierowuje mnie na /pages/:id, wiem że ma to związek z tym, że jest w routingu resources :pages.
Jak mogę zmienić @page, tzn. przekierowywanie np.
redirect_to(@page, :notice => 'Page was successfully created.')
aby kierowało na /:alias a nie /pages/:id.
Trochę chaotycznie, ale ciężko mi to inaczej wytłumaczyć :<
Pozdrawiam
get "/:alias" => "pages#show", :as=>alias
resources :pages
A w kontrolerze:
redirect_to(alias_path(:alias=>@page.alias), :notice => 'Page was successfully created.')
W ten sposób uzyskasz dokładnie to co chciałeś ale może warto zastanowić się nad innym rozwiązaniem. Co powiesz na adres “/pages/10-Jakis_alias”? Taką formę możesz uzyskać bez poprawiania routingu i wywoływania adresów w kontrolerach i widokach. wystarczy, że w modelu Page nadpiszesz metodę to_param tak by zwracała “#{id}-#{alias}” zamiast samego id. Jeśli drażni Cie “pages” w adresie to może zainteresuj się pluginem i18n-route.
Akurat :id-:alias nic by mi nie przeszkadzało - bardziej irytowałby mnie tutaj fakt tego “pages” i nie chodzi mi tutaj o to, że jest po angielsku - po prostu chciałbym aby tutaj były różnego rodzaju statyczne strony typu about, contact, etc.
A nie da się może po prostu zrobić, aby /:alias przekierowywało na /pages/:id (najlepiej z zachowaniem w pasku adresu /:alias)?