2009-04-22 14 views
54

Po wygenerowaniu rusztowania, Rails daje mi możliwość POST do items.xml, która utworzy nowy item. GET do items.xml po prostu wypisze je wszystkie. Gdzie Railsy określają, która metoda w kontrolerze (odpowiednio: create lub index) zostanie wywołana, w zależności od rodzaju wykonywanej akcji?Rails POST, PUT, GET

Mówiąc dokładniej, POST dzwoni methodA, ale GET na ten sam URL wywołuje metodęB. Gdzie to jest określone? Gdzie Railsy decydują się na wywołanie metody kontrolera index?

Odpowiedz

88

Wierzę, że jest określony przez REST. Oto lista dla ciebie:

GET /items  #=> index 
GET /items/1  #=> show 
GET /items/new #=> new 
GET /items/1/edit #=> edit 
PUT /items/1  #=> update 
POST /items  #=> create 
DELETE /items/1  #=> destroy 

Edited by dodać, aby wszystkie te trasy, w config/routes.rb, wystarczy dodać map.resources :items

+38

Wystarczy wpisać „Trasy natarcia”, aby zobaczyć co się dzieje. –

+0

Czy istnieje sposób, aby wyraźnie określić, że chcę używać POST tylko jak w ASP.NET MVC (atrybut [HttPost])? – Alex

+0

Jeśli wykonasz GET do/items, przejdziesz do akcji Index. Jeśli POST do/items, przejdziesz do Create. –

10

najlepsze miejsce, aby poznać ten byłby Routing Guide.

+0

Zrobiłem co w mojej mocy, aby wymienić uszkodzone linki. Sprawdź i upewnij się, że linkowałem do właściwych stron. Dzięki. –

5

Jak powiedział Don Werve, spójrz na plik routes.rb. Tam prawdopodobnie masz coś takiego:

map.resources :items 

To tutaj, gdzie szyny łączy żądania POST i GET do niektórych działań. Aby zobaczyć, jak to działa, spójrz na linki z innych odpowiedzi. Dokumenty pomagają tonę.

Do wszystkich tras i działań, do których prowadzą, można wpisać rake routes w wierszu polecenia, gdy znajdujesz się w katalogu głównym swojego katalogu szyn. To pokaże ci wszystko (w zakresie routingu), które daje ci szafot.

5

To bardzo pomoże, ale nie jest to bezpośrednia odpowiedź na twoje pytanie. Poniższe polecenie wyświetli mapowania używane przez twoją aplikację, więc nie musisz pamiętać wszystkich szczegółów ani odgadnąć.

$ rake routes 

Aby odpowiedzieć bardziej bezpośrednio, jest to konwencja, która używa szyn. Ustawienie tego odwzorowania w górę, gdy mu coś jak następuje w routes.rb

map.resources :items 
27

Rails definiuje siedem metod kontroler dla zasobów REST umownie. Są to:

 
Action HTTP Method Purpose 
------------------------------------------------------------------------- 
index GET   Displays a collection of resources 
show  GET   Displays a single resource 
new  GET   Displays a form for creating a new resource 
create POST   Creates a new resource (new submits to this) 
edit  GET   Displays a form for editing an existing resource 
update PUT   Updates an existing resource (edit submits to this) 
destroy DELETE  Destroys a single resource 

Zauważ, że ponieważ przeglądarek internetowych na ogół obsługują tylko GET i POST, Rails wykorzystuje ukryte pole, aby włączyć je do żądania PUT i DELETE jak właściwe.

Podanie map.resources :items w config/routes.rb pozwala uzyskać te siedem metod "za darmo". W dowolnym momencie możesz wyświetlić listę wszystkich tras w aplikacji, wprowadzając w konsoli rake routes.

+0

Możesz również sprawdzić kod źródłowy, aby "odtworzyć" dowolne z tych zachowań: [Rails v3.2.9 resources] (https://github.com/rails/rails/blob/v3.2.9/actionpack/lib/action_dispatch/ routing/mapper.rb # L984) w pliku actionpack/lib/action_dispatch/routing/mapper.rb – brutuscat

3

map.resources to metoda automagicznie udostępniająca trasy REST i pomocników ścieżek. Jest to fajna funkcja, jeśli już wiesz i rozumiesz, jak działa rutowanie w routingu, ale jest to również przeszkodą w uczeniu się szyn, ponieważ zbyt wiele jest ukrytych.

Railsguides ma ładny routes guide.

6

Czy chcesz wiedzieć, jak korzystać z POST? Zrób to, na przykład:

resources :items, :only => [:create] 

..etc. To jest dla Rails 3 przy okazji i wygeneruje pojedynczy zasób do tworzenia POST. Lub jeśli trzeba tylko bardzo niewielki podzbiór zbioru odpocząć, po prostu:

match 'items/:id' => "items#create', :via => :post 

itp itd

1

Szczerze mówiąc, naprawdę nie można pomylić z dokumentacją routingu na stronie szyn. Pomogło to podjąć kolejne kroki i wyjść poza wygodę zasobów (które dla większości aplikacji jest w porządku) i naprawdę przydać się do stałych dostępnych funkcji routingu.

http://guides.rubyonrails.org/routing.html

Powiązane problemy