2013-08-21 18 views
12

Wygenerowałem kontroler i zmieniłem trasy, ale otwarcie łączy spowodowało błędy na moim lokalnym serwerze.Dopasowywanie i trasy w szynach

kontroler i trasy Generowanie

rails generate controller StaticPages home about team contact 

Zmień routes.rb

MyApp::Application.routes.draw do 
    root to: 'static_pages#home' 

    match '/about', to: 'static_pages#about' 
    match '/team',  to: 'static_pages#team' 
    match '/contact', to: 'static_pages#contact' 
end 

Prace ścieżka korzeń, ale żaden z „O 'zespół', lub '' kontakt linki praca. Jest to błąd, który otrzymuję:

"Nie powinieneś używać metody match w swoim routerze bez określania metody HTTP.Jeśli chcesz udostępnić swoje działanie zarówno GET, jak i POST, dodaj opcję via: [:get, :post]. swoje działanie, aby uzyskać GET, użyj get w routerze: Zamiast: dopasuj "kontroler # akcja" wykonaj: pobierz "kontroler # akcja" "

Dlaczego nie mogę użyć" dopasowania "?

+0

Jakiej używasz wersji Rails? W terminalu przejdź do tego projektu szyn i wykonaj 'rails -v'. –

+2

Użyłem 4.0. Użycie polecenia "get" zamiast "match" rozwiązało problem. Dzięki – megashigger

Odpowiedz

26

match method has been deprecated.

Użyj get dla GET i post dla testu POST.

get '/about', to: 'static_pages#about'

+2

+1, aktualna wersja [Rails Routing Guide] (http://guides.rubyonrails.org/routing.html) nie mówi nic o "dopasowaniu", które jest przestarzałe. Dobra informacja! –

+0

Nie jest przestarzałe (jeszcze), wystarczy dodać adres: jak użytkownik2062950 powiedział. –

13

Można użyć match, masz muszę dodać via: opcję:

match '/about', to: 'static_pages#about', via: :get 
match '/team',  to: 'static_pages#team', via: :get 
match '/contact', to: 'static_pages#contact', via: :get 

Można również przekazać inne czasowniki HTTP do via: jeśli trzeba, jak via: [:get, :post]

Źródło: Rails Routing Guide

0

Po pierwsze, należy określić metodę HTTP dodając via: :get na koniec match 'st' => 'controller#action

I to lepiej użyć get '/home', to: 'static_pages#home'

Ale jest problem, że kod nie robi 't follow RESTful, który obsługuje tylko 7 akcji: indeks, nowy, edytuj, twórz, aktualizuj, pokaż i niszcz.

Są 2 rozwiązania:

SOL 1: Umieść je w innym kontrolerze (domów, abouts ..) i wszystkich tych kontrolerów mają działanie index.

SOL 2: Jeśli to za dużo pracy, możemy dopasować je do działania show. Używamy kontrolera static_pages, a każda strona (home, about) będzie przedmiotem.

Trasy będą wyglądać sympatie /static_pages/home /static_pages/about

wiem, że to nie jest dobre, ponieważ prefiksu static_pages.

Możemy łatwo pozbyć się tego przez dodanie niestandardowych tras pod koniec trasy file:

get '/:id', to: 'static_pages#show'

to wszystko. A jeśli uważasz, że to za dużo pracy (tak myślę), sprawdź ten klejnot High Voltage. Baw się dobrze.

Powiązane problemy