Was ist eine „Ressource“ in Rails?

74

Dumme Frage, aber ich habe einige anhaltende Verwirrung darüber, was genau eine "Ressource" in Rails ist. Der Begriff wird überall verwendet, aber ich habe das komische Gefühl, dass er eher locker verwendet wird. Es wird im Modell, im Controller und im wahrsten Sinne des Wortes in referenziert routes.rb.

Ist es die spezifische Route? Ordnet beispielsweise map.resourcesdie 7 RESTful "Ressourcen" zu. Ein Beispiel für eine Ressource wäre also der Aufruf beispielsweise der indexAktion des Controllers einer bestimmten Klasse?!?

Ist es ein Verweis auf die gesamte Seite / das Objekt, das abgerufen wird? oder vielleicht enger eine Datenbanktabelle? oder die Zeile wird zurückerhalten?

Ist es etwas anderes?

Wie auch immer, hoffentlich kann mich jemand klarstellen ...

Meltemi
quelle

Antworten:

92

Jedes Objekt, auf das Benutzer über URI zugreifen und CRUD- Operationen (oder eine Teilmenge davon) ausführen können, kann als Ressource betrachtet werden. Im Sinne von Rails handelt es sich im Allgemeinen um eine Datenbanktabelle, die durch ein Modell dargestellt und über einen Controller bearbeitet wird.

Beispielsweise verfügen Sie möglicherweise über eine UserRessource (mit einer usersTabelle in Ihrer Datenbank). Dies wird durch eine dargestellte UserModell wird abgebildet users_controllermit map.resources :users(die dann erzeugt Routen wie /users(eine Sammlung von Benutzerressourcen) und /users/1(einer bestimmten Benutzerressource).

Sie reagieren auf diese Ressourcen, indem Sie beim Aufrufen dieser Ressourcen die entsprechende HTTP-Methode verwenden. POSTzur Ressourcensammlung ( /users) erstellt einen neuen Datensatz; GETRuft eine Liste der Ressourcen ( /users) oder eines bestimmten Benutzers ( /users/1) ab. PUTaktualisiert einen bestimmten Benutzer ( /users/1/) und DELETEzerstört diesen Benutzer. Die URLs sind identisch, aber das Ergebnis (und die Controller-Aktion) können je nach HTTP-Verb unterschiedlich sein. Die Idee ist jedoch, dass /users/1unabhängig von der Aktion immer "Ich interagiere mit dem Benutzer mit der ID Nr. 1".

Chris Heald
quelle
Wenn ich eine Ressource habe, die kein Datenbankmodell verwendet (sie verwendet die API eines separaten Dienstes für die Persistenz), ist es dennoch sinnvoll, die Rails-Verknüpfung "Ressource" zu verwenden, oder ist es besser, die Routen nur manuell zu definieren?
Jonah
Natürlich können Sie damit resourcesRouten für Ressourcen definieren, die nicht in der Datenbank enthalten sind! Wenn Sie nicht alle Controller-Aktionen benötigen, an die standardmäßig weitergeleitet wird, verwenden Sie einfach only:und geben Sie except:an, welche Sie tatsächlich möchten. Zum Beispiel resources :things, only: [:index, :show]...
Tyler Rick
Ich weiß, dass dies alt ist, aber ich hoffe, jemand kann antworten. Wird die Verwendung von resources :usersin config/routes.rbnur zum Deklarieren der 7 REST-Routen verwendet?
Irfandy Jip
1
@IrfandyJip Ich bin kein Experte, aber ich weiß, dass das Hinzufügen resources :usersdie 7 REST-Routen für Sie deklariert, die Sie mit dem rails routesBefehl selbst überprüfen können . Können Sie Ihre Frage klären und erklären, ob Sie andere Routen für :user...
JR Bob Dobbs
8

In diesem guten Artikel wird erläutert, wie die meisten Entwickler der Meinung sind, dass "Ressource" mit der Datenbanktabelle synonym ist. Ich denke, das Argument, dass die Zuordnung zur Ressource den Controller dieser Datenbanktabelle (oder mit ActiveResource einer anderen REST-URL) zuordnet ).

Grundsätzlich denke ich, dass eine "Ressource" "persistierte Daten" sind. map.resourcesOrdnet die 7 RESTful- Aktionen einer bestimmten Suite persistenter Daten zu.

Aber ich habe nicht zu viel darüber nachgedacht. Gute Frage!

JohnMetta
quelle
2

Ich denke, sie meinen es wahrscheinlich im allgemeinen Web-Sinne, dh Ressource (Web) :

der Referent eines Uniform Resource Identifier

Ich glaube nicht, dass es etwas mit Datenbanktabellen zu tun hat.

Ken
quelle
2

Öffnen Sie Ihren Modellordner, das ist ein Hinweis darauf, über welche Ressourcen Sie verfügen! Beispiel: Benutzer, Bilder, Kommentare ...

Brian Joseph Spinos
quelle
Hm .. Ich denke nicht, dass dies eine gültige Antwort ist, insbesondere von neuen RoR-Benutzern. Ich bin hierher gekommen, weil ich durch die in Erste Schritte bereitgestellten Tutorials verwirrt war und nur sehe concerns/und weiter application_record.rbmache app/models/(ich bin in Schritt 5). Und ich verstehe nicht, warum das hilfreich wäre.
Irfandy Jip
Irfandry, in Rails, eine Ressource sind Entitäten, über die Ihre Anwendung verfügt, z. B. "Benutzer", "Bilder", "Kommentare", "Gefällt mir" ... in MVC (worauf Rails basiert) haben Sie separate Ordner Modelle, Ansichten und Controller ... Dies wird direkt aus dem von Ihnen angegebenen Link entnommen: "In der Blog-Anwendung erstellen Sie jetzt eine neue Ressource. Eine Ressource ist der Begriff, der für eine Sammlung ähnlicher Objekte wie Artikel verwendet wird , Menschen oder Tiere. Sie können Elemente für eine Ressource erstellen, lesen, aktualisieren und zerstören. Diese Vorgänge werden als CRUD-Vorgänge bezeichnet. "
Brian Joseph Spinos
Ja, das habe ich schon gelesen, aber ich bin immer noch verwirrt, als ich das gelesen habe. Besonders der Satz "Eine Ressource ist der Begriff, der für eine Sammlung ähnlicher Objekte verwendet wird" klingt für meinen Kopf wirklich seltsam, vielleicht weil Englisch nicht meine Muttersprache ist. Aber ich habe schon eine einfachere Antwort gefunden . Vielen Dank für Ihre Hilfe :)
Irfandy Jip
2

Viele Leute hier sagen, dass Ressourcen auf die Datenbanktabellen verweisen, die Sie haben. Es mag manchmal wahr sein, aber nicht immer. Ich könnte Ihnen viele Beispiele geben, bei denen Sie keine entsprechende Tabelle für eine bestimmte Ressource in Ihrer Datenbank haben. Daher ist es ziemlich falsch, es mit Tabellen zu verknüpfen.

Ich würde eine Ressource als eine Route definieren, die verwandten Anforderungen zugeordnet ist. Anstatt separate Routen für die Aktionen zu deklarieren, die Sie ausführen möchten, können Sie sie einfach mithilfe einer einfallsreichen Route deklarieren. In Rails bietet eine einfallsreiche Route eine Zuordnung zwischen HTTP requestsund URLszu controller actions.

Sagen Sie also, Sie definieren resources :usersin config/routes.rb.
Sie können jetzt eine Reihe von Helfern für die Controller in Ihrer Anwendung verwenden, z. B. edit_user_pathwelche zurückgegeben werden users/edit.

Palak Singhal
quelle
2

Hier ist ein guter Link: https://api.rubyonrails.org/v5.2.1/classes/ActionDispatch/Routing/Mapper/Resources.html

Grundsätzlich heißt es: Mit dem Ressourcen-Routing können Sie schnell alle gängigen Routen für einen bestimmten Ressourcen-Controller deklarieren. Anstatt separate Routen für Ihren Index zu deklarieren, Aktionen anzuzeigen, neu zu erstellen, zu bearbeiten, zu erstellen, zu aktualisieren und zu zerstören, deklariert eine einfallsreiche Route sie in einer einzigen Codezeile:

Ressourcen: Fotos

Wolf
quelle