Question

Je me demandais pourquoi, lorsque vous créez des itinéraires reposants dans des rails avec map.resources, il génère des actions pour nouveau, créer, modifier, mettre à jour . Quelque chose ne va pas dans la déclaration d'une seule action pour créer et mettre à jour et faire quelque chose comme ça?

def create
  unless post?
     @user = User.new
  else
     redirect_to :action => 'index' if user.create(params[:user])
  end
end

afin que nous puissions avoir quelque chose comme

:GET  users/create # to show the form (same as action - new)
:POST users/create # to create a new user

puisque Restful est basé sur des verbes, ne serait-ce pas la meilleure approche à utiliser?

Merci de votre attention

Était-ce utile?

La solution

Je pense qu'il y a deux problèmes liés mais distincts: les URL exposées et les méthodes de contrôleur vers lesquelles ils sont routés. Étant donné que l'un ou l'autre peut être modifié indépendamment, je vais les aborder séparément. Veuillez également noter que je vais parler un peu vaguement et strictement au sujet de REST tel qu’implémenté dans le contexte de Rails.

En ce qui concerne les URL externes, je pense qu’il est utile de distinguer les URL qui constituent l’API du système (: utilisateurs GET / 1 , : utilisateurs PUT / 1 , etc.) et les URL qui ne sont là que pour la commodité des personnes utilisant un navigateur Web ( utilisateurs / nouveau , utilisateurs / 5 / edit , etc.). L'API consiste uniquement à récupérer des ressources ou à interagir avec elles d'une manière ou d'une autre. Il s'agit des URL qu'un autre ordinateur va utiliser lors de son interaction avec votre système. Ces URL ne sont généralement que l’adresse de la ressource avec laquelle vous voulez interagir, puis vous utilisez la méthode HTTP et les paramètres pour indiquer ce que vous voulez faire (GET = affichez-moi cette ressource, PUT = changez cette ressource, etc. ). Les URL de commodité permettent d’afficher un formulaire afin de faciliter l’utilisation de l’API par un humain. Vous pouvez éditer un utilisateur à l'aide de curl pour taper manuellement tous les paramètres que vous souhaitez modifier et créer un POST pour les utilisateurs / 1, mais en tant qu'être humain, c'est beaucoup plus facile si vous pouvez simplement utiliser un formulaire .

Pour examiner vos exemples ci-dessus, : utilisateurs GET / create peut sembler logique (et est assez similaire à : utilisateurs GET / nouveau qui est la valeur par défaut). , mais : Les utilisateurs POST / create se traduiraient approximativement par "créer un nouvel utilisateur / create", ce qui n’a pas vraiment de sens.

En ce qui concerne les méthodes du contrôleur, " new " et " créer " accomplissent des tâches fondamentalement différentes, comme il est à espérer que cela ressort clairement des paragraphes précédents. L'un d'eux affiche un formulaire et l'autre crée une nouvelle ressource. Vous pourriez surcharger la même méthode pour ce faire, bien sûr, mais sans raison impérieuse, créer deux petites méthodes indépendantes pour gérer deux petites tâches indépendantes est probablement une approche plus naturelle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top