2012-05-29 12 views
10

W przypadku małej aplikacji do tworzenia dokumentacji dla programistów chciałbym skonfigurować aplikację Sinatra, aby wyświetlała tylko pliki HAML. Po trasach dla plików i obrazów CSS, chcę trasy, która próbuje załadować plik HAML dla dowolnej żądanej ścieżki.Jak mogę przekazać Sinatrze łączną, domyślną trasę?

Na przykład:

  • /index ładunki views/index.haml, jeśli istnieje
  • /this/page/might/exist ładunki views/this/page/might/exist.haml, jeśli istnieje

Jak bym określić tę drogę?

Odpowiedz

17

Wygląda to zrobi:

get '/*' do 
    viewname = params[:splat].first # eg "some/path/here" 

    if File.exist?("views/#{viewname}.haml") 
    haml :"#{viewname}" 

    else 
    "Nopers, I can't find it." 
    end 
end 
+1

musiałem to „po” wszystkich moich innych dróg, aby upewnić się, że są przetwarzane, w przeciwnym razie trasę catchall '/ *' będzie blokować wszystkie inne trasy – Rots

+0

Co stanie się, jeśli pojawi się błąd 500 w tym bloku? – nroose

+0

@nroose - błąd 500 jest czymś, co zwróci serwer WWW; nie może się zdarzyć w Ruby. Jeśli np. Wywołanie 'haml' powoduje błąd, masz rację, że nie uratowałbym go, a moja strona zwróciłaby 500. Ponadto, aby być bardziej poprawnym, powinienem wysłać kod statusu 404 w nagłówku, gdy wysyłając ciało "Nie mogę tego znaleźć". Ale to tylko prosty przykład. –

Powiązane problemy