2011-12-30 8 views
17

Mam aplikację szyny (Rails 3.0), którą muszę tymczasowo wyłączyć z użycia. Chociaż tak jest, chcę utworzyć nową trasę, która będzie kierowała wszystkie żądania do pojedynczego elementu statycznej treści. Mam kontroler skonfigurowany do obsługi moich stron statycznych.Jak utworzyć trasę Rails 3, która będzie pasować do wszystkich żądań i kierowana do jednego zasobu/strony?

Próbowałem coś takiego:

match '*' => 'content#holding' 

i

match '*/*' => 'content#holding' 

pasujące do wieloznaczny trasę jak opisano tutaj: Rails 3 route globbing bez powodzenia.

Jest to prawdopodobnie bardzo prosta odpowiedź, ale nie mogłem tego rozgryźć.

/EDIT/ Zapomniałem wspomnieć, że miałem tę regułę na samym szczycie mojej routes.rb pliku.

+0

Czy umieściłeś tę trasę na samym szczycie pliku tras? – Robin

Odpowiedz

39

Szyny musi wiązać parametrów URL do zmiennej, spróbuj tego:

match '*foo' => 'content#holding' 

Jeśli również chcesz dopasować /, użyj nawiasów, aby określić, że foo jest opcjonalne:

match '(*foo)' => 'content#holding' 
+0

To wydaje się działać dla wszystkich ścieżek, ale nie dla samego korzenia. Dodałem dodatkową tymczasową trasę główną do góry routes.rb, więc teraz działa tak, jak chcę - dzięki! – Nick

+1

Mój wynik końcowy wygląda następująco: "dopasuj" * foo '=> przekierowanie ('/') #NEWLINE root: to =>' content # holding '"Zasadniczo podjąłem twój pomysł, dodałem przekierowanie, a następnie przekierowałem root na moja strona trzymająca. – Nick

+1

Zobacz, czy moje zmiany powodują także roota – klochner

0

wpadłem na coś takiego, gdzie miałem nazw domen jako parametr w moim szlaku:

match '/:domain_name/', :to => 'sitedetails#index', :domain_name => /.*/, :as =>'sitedetails' 

Kluczem do tego kawałek był /.*/ który był wieloznaczny dla prawie wszystko. Więc może można zrobić coś takiego:

match '/:path/', :to => 'content#holding', :path=> /.*/, :as =>'whatever_you_want' 
1

Zrobiłem to wczoraj i pierwszy wpadł na rozwiązanie, które klochner pokazy. To, co mi się nie podobało, to fakt, że cokolwiek wprowadzisz w adresie URL, pozostaje tam po załadowaniu strony, a ponieważ chciałem złapać całą trasę, która przekierowuje do mojego root_url, nie było to zbyt atrakcyjne.

Co wymyśliłem wygląda następująco:

# in routes.rb 
get '*ignore_me' => 'site#unknown_url' 

# in SiteController 
def unknown_url 
    redirect_to root_url 
end 

Pamiętaj, aby trzymać wpis trasy na samym dole pliku!

EDYTOWANIE: Jak zaznaczył Nick, możesz również przekierować bezpośrednio w pliku tras.

+0

Tak - też to zauważyłem. Możesz także przekierowywać bezpośrednio w routes.rb - zobacz mój komentarz powyżej na odpowiedź klochnera – Nick

+0

@Nick Ah, teraz jest fajnie. Przejdę do tego rozwiązania. – cvshepherd

Powiązane problemy