2011-01-14 12 views
61

Głupie pytanie, ale mam pewne przewlekłe zamieszanie tego, co dokładnie "zasób" jest w Railsach. Termin jest używany wszędzie, ale mam zabawne wrażenie, że może być używany raczej luźno. Jest to odniesienie w modelu, kontroler i, całkiem dosłownie, w routes.rb.Co to jest "zasób" w Railsach?

Czy to konkretna trasa? Na przykład map.resources odwzorowuje 7 zasobów "REST". Tak więc przykład jeden zasób byłby wezwaniem do, powiedzmy, akcji index kontrolera konkretnej klasy?!?

Czy jest to odniesienie do całej pobieranej strony/obiektu? lub może, węższy, tabelę bazy danych? lub odzyskiwany rząd?

Czy to coś innego?

W każdym razie, mam nadzieję, że ktoś może ustawić mi prosto ...

Odpowiedz

80

Każdy obiekt, do którego użytkownicy mają mieć dostęp za pośrednictwem identyfikatora URI i wykonujący operacje CRUD (lub jego podzestaw), może być traktowany jako zasób. W znaczeniu Rails jest to ogólnie tabela bazy danych, która jest reprezentowana przez model i działała przez kontroler. Na przykład możesz mieć zasób User (z tabelą users w twoim DB) To jest reprezentowany przez User modelu są odwzorowywane na users_controller z map.resources :users (który następnie generuje trasy jak /users (zbiór zasobów użytkownika) i /users/1 (specyficzny zasobów użytkownika).

możliwość działania na tych zasobów za pomocą odpowiednich . metoda HTTP przy wykonywaniu połączeń do tych zasobów POST do gromadzenia zasobów (/users) tworzy nowy rekord; GET pobiera listę zasobów (/users) lub konkretnego użytkownika (/users/1) PUT aktualizuje konkretnego użytkownika (/users/1/) i DELETE. niszczy tego użytkownika. Adresy URL są takie same, ale wynik (i działanie kontrolera) może być różny w zależności od czasownika HTTP. Pomysł polega jednak na tym, że /users/1 zawsze oznacza "wchodzę w interakcję z użytkownikiem, który ma ID # 1", niezależnie od akcji.

+0

Jeśli mam zasób, który nie korzysta z modelu bazy danych (korzysta z API oddzielnej usługi dla utrwalania) czy nadal sensowne jest używanie "zasobów" szyn Skrót lub czy lepiej po prostu definiować trasy ręcznie? – Jonah

7

Oto good article omawianie jak większość deweloperzy uważają, że „zasób” jest synonimem tabeli bazy danych, argument, myślę, że jest mapowanie do zasobu mapuje kontroler do tej tabeli bazy danych (lub, z ActiveResource, na inny URL REST).

Zasadniczo uważam, że "zasób" to "utrwalone dane". map.resources mapuje 7 RESTful działań do konkretnego zestawu utrwalonych danych.

Ale nie myślałem o tym zbyt głęboko. Dobre pytanie!

3

myślę, że prawdopodobnie na myśli w sensie ogólnym internetowej, czyli Resource (Web):

referent jakiegokolwiek Uniform Resource Identifier

Nie sądzę, że ma coś wspólnego z tabele bazy danych.

3

otwórz folder modelu, który jest podpowiedź, jakie zasoby masz! przykład: użytkownicy, zdjęcia, komentarze ...