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...
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.
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!
Ouvrez votre dossier de modèle, qui est un indice de ce que les ressources que vous avez! exemple: utilisateurs, images, commentaires...
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.
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
.