2012-07-06 14 views

Odpowiedz

14

Zasadniczo, zasoby routingu mają miejsce, gdy zasoby dają możliwości działania kontrolerowi.

http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use

Jeżeli liczbę mnogą zasoby są wykorzystywane jako sposób do obsługi ogólnych wniosków na temat każdej pozycji, a następnie pojedyncza zasób jest droga do pracy na danej pozycji w zasięgu ręki.

Innymi słowy, jeśli posiadam kolekcję jabłek, aby pobrać określone jabłko, muszę powiedzieć routerowi "Jabłka", jakie jabłko pobrać, wysyłając identyfikator jabłka. Jeśli mam już jedno Apple, identyfikator nie jest potrzebny.

Wskazówka różnice między nimi, patrząc na jakie działania (lub trasy) zostali:

  • zasobów: Index, nowy, tworzyć, show, edycja, zmiana, zniszczyć
  • zasobu: nowy, tworzyć pokaz, edytować, aktualizować zniszczyć

W przykładzie:

  1. Kontroler "geocoder" to pojedynczy zasób, którego można użyć do edycji, tworzenia, aktualizowania itp.
  2. "Posty" kontrolera to zbiór liczników, które będą obsługiwać przychodzące ogólne posty, które można indeksować, edytować, Stwórz..etc
+1

Moja dezorientacja: jaki jest sens w tworzeniu pojedynczej zasobów; powiedzmy, że zdefiniowaliśmy 'resource: geocoder'; czy to oznacza, że ​​będziemy mieli pojedynczy rekord "geocoder" w całej "tabeli" zwanej "geocoders"? – illusionist

+2

W linku do artykułu (który został zaktualizowany, odkąd to opublikowałem), oni faktycznie dali dobry przykład. Pojedynczy zasób o nazwie/profile (zamiast/profile: id), byłby przydatny, aby zawsze wyświetlać profil aktualnie zalogowanego użytkownika. Tak więc pojedynczy geocoder może należeć do lokalizacji obecnego użytkownika, gdzie jako geokodery liczby mnogiej może należeć do zbioru miejsc w pobliżu. Od Ciebie zależy, czy chcesz włączyć do tej kolekcji swój własny geocode. – sksallaj

8

http://guides.rubyonrails.org/routing.html#singular-resources

Czasami masz zasób, że klienci zawsze patrzeć w górę bez odwołującego identyfikator. Na przykład chcesz/profil, aby zawsze pokazywać profil aktualnie zalogowanego użytkownika. W takim przypadku można użyć pojedynczego zasobu do odwzorowania/profilu (zamiast/profilu /: id) na akcję pokazu .

Dobrym sposobem, aby to zobaczyć, jest to, że zasób nie ma akcji indeksu, ponieważ ma być tylko jeden.

3

Myślę, że tylko widok indeksu.

również zgłaszano problemy z routingiem za pomocą helpera zasobów i pomocników formularzy. Osobiście używać składni:

resources :someresource, except: :index 

w celu uniknięcia reported bugs.

4

Singular Zasoby:

Czasami masz zasób, że klienci zawsze patrzeć w górę bez odwoływania identyfikator. Na przykład, chcesz, aby /profile zawsze pokazywał profil aktualnie zalogowanego użytkownika.

Albo Normalnie aktualnie zalogowanego użytkownika należy do jednej organizacji, tak aby goto jego/jej profilowa organizacja nie może być dwie trasy

#1 
/organizations/:id 

#2 
/organization #simply 

Tutaj późniejsza realizacja większy sens; Czyż nie? dostajesz przedmiot Organizacji od stowarzyszenia

# in organizations#show 
@organization = current_user.organization 

Aby zdefiniować taką osobliwą zasób użyć resource sposób: Przykład

# in routes.rb 
resource :organization 

tworzy sześć różnych tras w aplikacji, wszystkie mapowanie do kontrolera organizacje:

enter image description here

podczas gdy ty definiujesz wiele zasobów używając resources Metoda

resources :organizations 

enter image description here

Powiązane problemy