Pourquoi est-il nécessaire de définir une nouvelle méthode dans le contrôleur RESTful, de la suivre avec une méthode create?
La recherche Google ne m'a pas fourni la réponse que je cherchais. Je comprends la différence, mais je dois savoir pourquoi ils sont utilisés tels qu'ils sont.
la source
Dans la documentation ActiveRecord :: Base :
create (attributs = nil) {| objet | ...}
new (attributes = nil) {| self if block_given? | ...}
create
Instancie donc le nouvel objet, le valide, puis l'enregistre dans la base de données. Etnew
crée uniquement l'objet local mais n'essaie pas de le valider ou de l'enregistrer dans la base de données.la source
New instancie une nouvelle instance de modèle, mais elle n'est pas enregistrée tant que la méthode save n'est pas appelée.
Create fait la même chose que new, mais l'enregistre également dans la base de données.
Parfois, vous voulez faire des choses avant d'enregistrer quelque chose dans la base de données, parfois vous voulez juste le créer et l'enregistrer immédiatement.
la source
Les parties RESTful de Rails sont conçues pour être très proches du fonctionnement du protocole HTTP. Dans le protocole HTTP, une demande GET n'est pas censée modifier les données. Logiquement, si vous regardez le fonctionnement de toutes les actions RESTful dans Rails, elles correspondront aux actions HTTP. Un POST sert à générer de nouvelles données, il est donc logiquement créé. Vous utilisez un GET pour servir la version de formulaire de cela ou en d'autres termes, la nouvelle action. Index et show sont également des GET, la mise à jour est un PUT (ou PATCH dans Rails 4+) et destroy est un DELETE en HTTP.
De plus, il sépare bien la logique dans le contrôleur et vous donne un moyen fluide de traiter les erreurs (en restituant la nouvelle action avec des messages d'erreur).
la source
"You use a GET to serve the form version of that or in other words, the new action"
merci pour la réponse mais personnellement je trouve cette convention de nommage vraiment déroutante