2010-07-14 2 views
2

Lorsque je suis dans/profile/new, par exemple, et que je soumets un formulaire pour créer un profil, Rails sait effectuer une opération POST; et quand je mets à jour ce profil de/profile/edit/1, Rails sait effectuer une opération PUT ... Ma question est, comment sait-il faire cela?Comment les actions du contrôleur connaissent-elles l'opération REST à effectuer?

Je n'arrive pas à comprendre comment cela fonctionne après le contrôleur. Que se passe-t-il exactement en arrière-plan? J'ai creusé un peu et je connais ActiveRecord et ActiveResource? sont impliqués, mais j'aimerais connaître les détails. Je ne suis là que depuis Rails 2.2 et chaque ressource que je trouve semble enseigner par l'exemple. Je suis intéressé à comprendre comment les choses fonctionnent à un niveau inférieur, mais il n'y a rien pour me guider à travers l'apprentissage en lisant le code source apis &.

Répondre

2

Vous savez comment une page d'affichage d'une nouvelle page ou d'une page d'édition dans l'échafaudage d'un utilisateur semble correcte?

form_for(@user) # something like that 

C'est donc une méthode d'aide que vous pouvez trouver à l'intérieur ACTION_VIEW/aide .. fichier

Fondamentalement, la forme de rendu pour les nouvelles et modifier sera décidée par cette méthode form_for, ce que cette méthode form_for fera est (je viens de faire quelques points de balle)

1) Il vérifiera ce type d'entrée que vous avez donné dans votre form_for (vérifier api pour les différentes façons d'utiliser form_for aide) 2) Il décidera des options html à base sur le code ci-dessous

if object.respond_to?(:new_record?) && object.new_record? 
    { :class => dom_class(object, :new), :id => dom_id(object), :method => :post } # for new 
else 
    { :class => dom_class(object, :edit), :id => dom_id(object, :edit), :method => :put } # for edit 
end 

3) Il fera encore une chose pour la page d'édition, il ajoutera un champ caché qui aura la valeur de l'ID de l'utilisateur.

S'il vous plaît laissez-moi savoir si vous avez besoin de plus de détails. Je vais mettre à jour ma réponse en conséquence.

+0

Merci pour votre réponse. Je suppose que la prochaine chose à faire est alors d'explorer ActionView un peu plus pour comprendre ce qui se passe vraiment, comme quand vous appelez respond_to dans le contrôleur. Il devrait vraiment y avoir quelque chose à enseigner à Rails du bas vers le haut, mais seulement pour ceux qui osent. On ne peut qu'être si loin en utilisant des exemples et des guides étape par étape. – user291702

+0

Essayez d'avoir une bonne compréhension de Ruby, si vous avez une connaissance complète de Ruby, vous pouvez comprendre à peu près la plupart des concepts de base dans Rails. – Vamsi

1

Le meilleur que je peux dire, il dépend complètement de ce que vous effectuez dans le contrôleur. Par exemple, @object.new serait une action POST, où-@object.find([:params]) serait une action GET, basée sur la pratique RESTful.

Je pourrais être hors base, car je suis dans le même bateau que vous mais c'est mon interprétation.

+0

Oui. Et, ces actions sont mappées à cause de map.resources dans le fichier routes.rb. Mais, sinon, il est juste codé dans Rails à faire (rendre HTML/Javascript qui le fait) un PUT lorsque vous mettez à jour un enregistrement sur un contrôleur RESTful. – huntaub

Questions connexes