[RUBY] [Rails] J'ai étudié la différence entre les ressources et les ressources

Je suis un débutant avec "super" qui se débat tous les jours avec les Rails. Je l'ai lu dans le texte il y a quelques semaines, et si j'utilise des ressources pour le routage, je ne sais pas ce que c'est, mais je me souviens que l'action et la méthode HTTP sont liées, et j'ai continué à taper des ressources sans en connaître la raison.

Bien sûr, il y a eu un moment où une telle méthode et une telle compréhension se sont bloquées, alors j'ai décidé de m'asseoir et de faire face aux ressources (pluriel) et aux ressources (uniques), alors j'ai écrit cet article.

Que sont les ressources (pluriel) en premier lieu?

Une ressource est une ligne d'informations stockées dans une table de la base de données. C'est une fonction très pratique qui vous permet de créer une application "RESTful" en définissant plusieurs itinéraires simplement en écrivant des ressources sur une seule ligne.

Si vous n'avez pas utilisé de ressources

routes.rb


Rails.application.routes.draw do
  get 'tweets'     => 'tweets#index'
  get 'tweets/:id' => 'tweets#show'
  get 'tweets/new' => 'tweets#new'
  post 'tweets' => 'tweets#create'
  get 'tweets/:id/edit' => 'tweets#edit'
  patch 'tweets/:id'  => 'tweets#update'
  delete 'tweets/:id' => 'tweets#destroy'
end

Je dois saisir manuellement toutes les descriptions, ce qui est très déroutant. Avec cela seul, il semble qu'il s'effondrera pendant environ une demi-journée.

Donc, en utilisant les ressources rumeurs, j'ai essayé de décrire le routage,

routes.rb


Rails.application.routes.draw do
  resources :tweets
end

Haut de gamme. Quand je vérifie le terminal,

Terminal


tweets     GET    /tweets(.:format)          tweets#index
           POST   /tweets(.:format)          tweets#create
new_tweet  GET    /tweets/new(.:format)      tweets#new
edit_tweet GET    /tweets/:id/edit(.:format) tweets#edit
tweet      GET    /tweets/:id(.:format)      tweets#show
           PATCH  /tweets/:id(.:format)      tweets#update
           PUT    /tweets/:id(.:format)      tweets#update
           DELETE /tweets/:id(.:format)      tweets#destroy

Le routage pour effectuer le traitement CRUD n'est-il pas terminé avec brio? C'est pratique.

Alors qu'est-ce que la ressource (forme unique)?

Voici le gars qui me dérange. En fait, il existe également une méthode appelée ressource qui décrit non seulement au pluriel, mais également au singulier. Vérifions-le quand même.

En fait, si vous regardez le contenu du routage en utilisant la ressource,

routes.rb


Rails.application.routes.draw do
  resource :tweet #resource(Forme unique)に合わせて、モデル名もtweetとForme uniqueにしています!
end

À première vue, le routage est presque le même. Cependant, si vous vérifiez le terminal, vous remarquerez qu'il existe des différences par rapport au moment où vous avez écrit des ressources (pluriel).

Terminal


new_tweet  GET    /tweet/new(.:format)   tweets#new
edit_tweet GET    /tweet/edit(.:format)  tweets#edit
tweet      GET    /tweet(.:format)       tweets#show
           PATCH  /tweet(.:format)       tweets#update
           PUT    /tweet(.:format)       tweets#update
           DELETE /tweet(.:format)       tweets#destroy
           POST   /tweet(.:format)       tweets#create

Différences entre les ressources et les ressources

Il existe deux différences majeures, ① Y a-t-il une action d'index? ② S'il faut inclure: id dans l'url </ strong> est.

Les tweets ont besoin d'une fonction de liste, donc si vous voulez l'utiliser, ce devrait être des ressources. Cependant, pour les éléments qui n'ont pas besoin d'être répertoriés par index, comme le profil d'un utilisateur, il est préférable d'utiliser la ressource.

En fonctionnement réel, je pense qu'il est difficile de les utiliser simplement, mais pour le dire simplement, Dans le cas de plusieurs ressources existant sur l'application → ressources S'il n'y a qu'une seule ressource sur l'application → ressource Je pense que c'est normal de comprendre comme ça.

membre et collection

Maintenant que vous connaissez la différence entre les ressources et les ressources, c'est déjà 100 personnes! </ strong> Il a 20 millions d'années d'avance. Les seules actions qui peuvent être définies à l'aide de ressources sont les sept actions principales répertoriées ci-dessus.

"Je veux ajouter une fonction de suivi ..." "Je me demande si la fonction de recherche est impossible ..." Si vous souhaitez développer à partir de 7 actions de base telles que, et ajouter des fonctions, des fonctions plus pratiques "membre" et "collection" </ strong> il y a.

Qu'est-ce qu'un membre?

Imaginez implémenter une fonction de suivi d'utilisateur à utilisateur. Bien entendu, le modèle User lui-même peut également utiliser des ressources pour définir le routage (car il y a plusieurs utilisateurs sur l'application).

Identifiez les identifiants de l'utilisateur, associez-les et définissez des actions pour les ressources individuelles spécifiées par les identifiants!

routes.rb


Rails.application.routes.draw do
  resources :users do
    get :follows, on: :member
    get :followers, on: :member
  end
end

Salut c'est tout. Quand je vérifie le terminal,

Terminal


follows_user    GET   /users/:id/follows(.:format)    users#follows
followers_user  GET   /users/:id/followers(.:format)  users#followers
#Ci-dessous, 7 actions sont omises

Étonnamment, vous pouvez définir des actions de suivi et d'abonnés pour des ressources individuelles, y compris l'identifiant de l'utilisateur!

Qu'est-ce que la collection

Ensuite, passez à la collection telle qu'elle est. La différence avec membre est que vous pouvez définir des actions pour toute la ressource. Expliquons en détail.

Quant au routage,

routes.rb


Rails.application.routes.draw do
  resources :users do
    get :search, on: :collection
  end
end

C'est devenu un événement annuel. Vérifions le terminal.

Terminal


search_users   GET    /users/search(.:format)    users#search
#Ci-dessous, 7 actions sont omises

Si vous utilisez la collection, vous pouvez acheminer vers l'action de recherche sans: id dans l'url.

en conclusion

Merci pour votre explication longue et non coordonnée. En m'expliquant, il y avait une partie qui a approfondi ma compréhension, donc je pense que plus je l'utilise, plus elle imprégnera mon corps. J'espère que cela vous aidera à étudier la programmation.

Recommended Posts