221 votes

Créer des rails nouvelle vs

Pourquoi est-il nécessaire de définir une nouvelle méthode au contrôleur RESTful, suivi avec une méthode create ?

Recherche Google n’a pas de me donner la réponse que je cherchais. Je comprends la différence, mais la nécessité de savoir pourquoi ils sont utilisés comme elles sont.

293voto

Steve Weet Points 15395

Au sein de Rails pour la mise en œuvre de REPOS nouvelles et créer sont traités différemment.

Un HTTP GET à l' /resources/new est destiné à rendre une forme appropriée pour la création d'une nouvelle ressource, ce qui n'est par l'appel de la nouvelle action dans le contrôleur, ce qui crée un nouveau non enregistrées enregistrement et rend le formulaire.

Un HTTP POST /resources prend le dossier créé dans le cadre de la nouvelle action et le transmet à la créer une action dans le contrôleur, qui tente ensuite de les enregistrer dans la base de données.

274voto

Justin Ethier Points 57486

À partir de la ActiveRecord::Base de la documentation:

créer(attributs = nil) {|objet| ...}

Crée un objet (ou plusieurs objets) et l'enregistre dans la base de données, si les validations de passe. L'objet résultant est retourné si l'objet a été enregistré avec succès dans la base de données ou non.

nouveau(attributs = nil) {|self si block_given?| ...}

De nouveaux objets peuvent être instanciés que soit vide (pass, pas de construction de paramètre) ou de pré-série avec des attributs mais pas encore enregistré (passer d'un hachage avec clé de noms correspondant à l'associé de la table des noms de colonne). Dans les deux cas, l'attribut valide les touches sont déterminés par les noms de colonne de la table associée - par conséquent, vous ne pouvez pas avoir des attributs qui ne font pas partie des colonnes de la table.

Donc, create instancie un nouvel objet, le valide, puis l'enregistre dans la base de données. Et new seulement crée l'objet local, mais ne pas tenter de la valider ou de l'enregistrer dans la bd.

19voto

ghoppe Points 10004

Nouveau instancie une nouvelle instance de modèle, mais il n’est pas sauvegardé jusqu'à l’enregistrement méthode est appelée.

Créer fait la même chose comme nouveau, mais aussi enregistre dans la base de données.

Parfois, vous voulez faire les choses avant de l’enregistrer quelque chose à la base de données, parfois vous voulez juste pour créer et enregistrer tout de suite.

11voto

Jared Points 1284

Le repos des pièces de Rails sont faits pour être très proche de la façon dont le protocole HTTP œuvres. Dans le protocole HTTP, d'une requête GET n'est pas censé modifier les données. Logiquement, si vous regardez la façon dont toutes les actions Reposant sur des Rails de travail, ils correspondent avec HTTP actions. Un POSTE est destiné à la production de nouvelles données, de sorte qu'il est logiquement créer. Vous utilisez un moyen de se servir de la forme de la version de que ou en d'autres termes, la nouvelle action. Index et le spectacle sont aussi Obtient, de mise à jour est un PUT (ou PATCH dans les Rails 4+), et de détruire est un DELETE dans HTTP.

En outre, il sépare bien la logique du contrôleur et vous donne une manière fluide à traiter avec des erreurs (par ré-rendu de la nouvelle action avec des messages d'erreur).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X