Qu'est - ce qu'une "ressource" dans Rails?

Question stupide mais j'ai une certaine confusion persistante de ce que, exactement, une" ressource " est dans Rails. Le terme est utilisé partout, mais j'ai un drôle de sentiment qu'il pourrait être utilisé plutôt vaguement. Il est référencé dans le modèle, le contrôleur et, littéralement, dans routes.rb.

Est - ce la route spécifique? Par exemple, map.resources mappe les 7 "ressources"RESTful. Donc, un exemple deune ressource serait l'appel à, disons, l'action index du contrôleur d'une classe particulière?!?

Est une référence à l'ensemble de la page ou de l'objet en cours de récupération? ou peut-être, plus étroitement, une table de base de données? ou la ligne en cours de récupération?

Est-ce autre chose?

Quoi qu'il en soit, j'espère que quelqu'un peut me mettre au clair...

65
demandé sur Meltemi 2011-01-14 03:37:57

5 réponses

Tout objet auquel vous souhaitez que les utilisateurs puissent accéder via URI et effectuer des opérations CRUD (ou un sous-ensemble de celles-ci) peut être considéré comme une ressource. Dans le sens Rails, c'est généralement une table de base de données qui est représentée par un modèle et qui agit via un contrôleur.

Par exemple, vous pourriez avoir une ressource User (avec une table users dans votre base de données). Ceci est représenté par un modèle User, est mappé à users_controller avec map.resources :users (qui génère ensuite des routes comme /users (une collection de ressources Utilisateur) et /users/1 (une ressource utilisateur spécifique).

Vous agissez sur ces ressources en utilisant la méthode HTTP appropriée lors des appels à ces ressources. POST pour la collecte de ressources (/users) crée un nouvel enregistrement; GET récupère une liste de ressources (/users) ou un utilisateur spécifique (/users/1). PUT met à jour un utilisateur spécifique (/users/1/) et DELETE détruit cet utilisateur. Les URL sont les mêmes, mais le résultat (et l'action du contrôleur) peuvent être différents en fonction du HTTP verbe. L'idée, cependant, est que /users/1 signifie toujours "j'interagis avec l'utilisateur qui a L'ID # 1", quelle que soit l'action.

82
répondu Chris Heald 2011-01-14 02:31:01

Voici un bon article discutant de la façon dont la plupart des développeurs pensent que "ressource" est synonome avec la table de base de données, l'argument, je suppose, étant que le mappage à la ressource mappe le contrôleur à cette table de base de données (ou, avec ActiveResource, à une autre url REST).

Fondamentalement, je pense qu'une" ressource "est" données persistantes."map.resources mappe les 7 actions RESTful à une suite particulière de données persistantes.

Mais je n'y ai pas trop réfléchi. Bonne question!

7
répondu JohnMetta 2011-01-14 01:02:22

Ouvrez votre dossier de modèle, qui est un indice de ce que les ressources que vous avez! exemple: utilisateurs, images, commentaires...

3
répondu Brian Joseph Spinos 2013-09-17 19:00:18

Je pense qu'ils le signifient probablement dans le sens général du web, c'est-à-dire Resource (Web):

Le référent de tout Identificateur de Ressource uniforme

Je ne pense pas que cela ait quelque chose à voir avec les tables de base de données.

2
répondu Ken 2011-01-14 01:12:52

Beaucoup de gens ici disent que les ressources se réfèrent aux tables de base de données que vous avez. Il peut être vrai parfois, mais pas nécessairement vrai toujours. Je pourrais vous donner beaucoup d'exemples où vous n'avez pas de table correspondante dans votre base de données pour une ressource particulière. Par conséquent, l'asssocier avec des tables est plutôt faux.

Je définirais une ressource comme une route qui correspond aux demandes associées. Donc au lieu de déclarer des routes séparées pour les actions que vous voulez faire vous pouvez simplement déclarer eux en utilisant un ingénieux route.In Rails, une route ingénieuse fournit un mappage entre HTTP requests et URLs à controller actions.

Disons donc que vous définissez resources :users dans config/routes.rb.
Vous pouvez maintenant utiliser un certain nombre d'aides pour les contrôleurs dans votre application comme edit_user_path qui retourne users/edit .

0
répondu Palak Singhal 2018-07-13 05:56:19