[RUBY] [Rails] J'ai étudié la différence entre une nouvelle méthode, une méthode de sauvegarde, une méthode de construction et une méthode de création.

Je suis un débutant avec "super" qui se débat tous les jours avec les Rails. Partagez pour organiser vos propres connaissances.

N'y a-t-il pas beaucoup de méthodes pour créer des objets?

Je n'ai pas remarqué ce fait lorsque je numérisais le texte, mais l'autre jour "Oh, si vous pensez que c'est une nouvelle méthode, utilisez-vous la méthode create ici ... Si vous y réfléchissez, il pourrait y avoir un build ... Quoi?! " J'étais dans un tel état, alors j'ai décidé d'enquêter moi-même. C'est un court article, mais restez avec moi jusqu'à la fin. image.png

À propos de la nouvelle méthode et de la méthode d'enregistrement

Commençons par l'utilisation de base de la nouvelle méthode. Au fait, j'écris en partant du principe que je publierai avec le modèle Book.

ruby:books_controller:rb


def new
  @book = Book.new
end

Book.new crée une instance vide de la classe Book et l'affecte à la variable d'instance @book. "Tout le monde le sait" J'avais l'habitude de le penser, mais il y avait un moyen de spécifier l'argument avec la nouvelle méthode. Le voici

ruby:books_controller:rb


def new
  @book = Book.new(title: "Rashomon", author:"Ryunosuke Akutagawa")
#Le titre est "Rashomon" et l'auteur est "Ryunosuke Akutagawa".
end

Si vous publiez un nouveau livre avec ceci, quels que soient les caractères que vous entrez dans le champ de saisie, vous ne pourrez pas vous inscrire autre que Rashomon (rires) La nouvelle méthode n'a pas simplement transmis une instance vide. Je suis désolé pour ceux qui le savaient.

Après la nouvelle méthode, utilisez la méthode save dans l'action de création pour enregistrer les données. Le voici

ruby:books_controller:rb


def create
  @book = Book.new(book_params)
  @book.save
end

Enfin, j'ai pu me réinscrire dans la base de données Book. Dans le cas de la méthode de sauvegarde, elle peut être enregistrée dans la base de données avec la nouvelle méthode.

À propos de la méthode de création

C'est là qu'intervient la méthode de création supposée. Les étapes enregistrées à l'aide de la nouvelle méthode et de la méthode d'enregistrement décrites ci-dessus peuvent être complétées en une seule ligne avec la méthode create.

Qu'est-ce que ça veut dire?

ruby:books_controller:rb


def create
  Book.create(title: "Rashomon", author:"Ryunosuke Akutagawa")
end

Avec cela seul, j'ai pu l'enregistrer dans la base de données. Non seulement vous pouvez enregistrer les données, mais vous pouvez également instancier le modèle en même temps. Mecha facile. Facile.

Syntaxe de base


Nom du modèle.create(Nom de colonne: "valeur")

Encore une fois, la méthode create est une méthode qui fait du nouveau et enregistre en même temps.

Alors pourquoi ne pas simplement utiliser la méthode create? Il semble qu'une idée superficielle surgira, mais ce n'est pas si doux.

Comment utiliser correctement

Si vous voulez faire quelque chose avec l'instance créée, vous ne pouvez pas utiliser la méthode create, vous devrez donc écrire une nouvelle méthode et une méthode de sauvegarde. Plus précisément

  1. Lorsque vous souhaitez créer une branche conditionnelle en utilisant if
  2. Lorsque vous souhaitez afficher un message d'erreur avec rendu Et ainsi de suite, qui sera expliqué ci-dessous.

❶ Branchement conditionnel utilisant if

users_controller.rb


def create
  @user = User.new(user_params) #Créer une variable d'instance
  if @user.save
    redirect_to @user, notice: 'Création de l'utilisateur terminée'
  else
    render :new #Destination du rendu lorsque l'enregistrement n'a pas pu être effectué
  end
end

De cette manière, lorsque des branchements conditionnels se produisent, comme l'utilisation de variables d'instance pour se diviser en modèles de réussite et en modèles d'échec, la nouvelle méthode et la méthode de sauvegarde doivent être utilisées.

❷ Je souhaite émettre un message d'erreur avec le rendu

Par exemple, sur l'écran de création d'une nouvelle publication (nouvelle action), le contrôle de validation fonctionne et la publication ne peut pas être effectuée. À ce moment-là, si un message d'erreur apparaît au-dessus de la colonne de l'article, il est très facile à comprendre. Je vais vous expliquer en détail.

ruby:books_controller:rb


def new
  @book = Book.new
end

def create
  @book = Book.new(params[:id])
  if  @book.save
      redirect_to book_path(@book.id)
  else
      render 'layouts/errors'
  end
end

ruby:views/books/new.html.erb


<h1>New Book</h1>
<%= render 'layouts/errors', obj: @book %>
#réduction

ruby:layouts/_errors.html.erb


<% if obj.errors.any? %>  #Pour obj@Livre de remplacement
  <div id="error_explanation">
    <h3><%= pluralize(obj.errors.count, "error") %> prohibited this obj from being saved:</h3>

    <ul>
    <% obj.errors.full_messages.each do |message| %>
      <li><%= message %></li>
    <% end %>
    </ul>
  </div>
<% end %>

Comme mentionné ci-dessus, même lorsque vous utilisez une variable d'instance contenant une nouvelle méthode pour émettre un message d'erreur, cela n'est pas possible avec la méthode create seule. Je dois souvent y penser ...

À propos de la méthode de construction

C'est finalement la dernière méthode. Cependant, je pense que c'est le moins important. Dans les rails actuels, les méthodes nouvelles et de construction fonctionnent presque de la même manière. Dans les anciennes versions de rails, la différence était de savoir si une clé externe était automatiquement ajoutée lors de l'association, mais maintenant, la nouvelle méthode et la méthode de construction sont définies avec une clé externe. Selon le lieu de travail, il y a des cas où la construction est recommandée dans des situations spécifiques, mais sinon, ce ne sera pas un problème de l'unifier dans une nouvelle méthode.

en conclusion

Cette fois aussi, j'ai beaucoup appris. Plus vous creusez plus profondément, plus vous découvrirez de nouvelles choses, même si vous pensez: «Je le sais». Je continuerai à me consacrer aux études.

Recommended Posts

[Rails] J'ai étudié la différence entre une nouvelle méthode, une méthode de sauvegarde, une méthode de construction et une méthode de création.
[Rails] Différence entre la méthode de création et la méthode nouvelle + sauvegarde
[Rails / Active Record] À propos de la différence entre créer et créer!
[Rails] J'ai étudié la différence entre les ressources et les ressources
Différence entre i ++ et ++ i
[Ruby] J'ai réfléchi à la différence entre each_with_index et each.with_index
Différence entre nouveau et créer dans le contrôleur d'action Rais
[Rails] Quelle est la différence entre l'installation et la mise à jour du bundle?
Quelle est la différence entre une action et une méthode d'instance?
Remplaçons la différence entre == (identité) et méthode equals (équivalence)
Différence entre la méthode d'instance et la méthode de classe
Différence entre l'opérateur == et la méthode égale
Différence entre l'opérateur == et la méthode eqals
[Rails] Différence entre find et find_by
Maintenant dans la troisième année, le malentendu que j'ai remarqué est la différence entre la méthode equals et ==
[rails] Différence entre redirect_to et render
Facile à comprendre la différence entre la méthode d'instance Ruby et la méthode de classe.
À propos de la différence entre irb et pry
J'ai étudié le modèle d'état et le modèle de stratégie
[Rails] Différence entre redirect_to et render [Débutant]
[Java] Comprendre la différence entre List et Set
[iOS] Comprendre la différence entre le cadre et les limites
Comprenez la différence entre les classes abstraites et les interfaces!
Quelle est la différence entre SimpleDateFormat et DateTimeFormatter? ??
Différence entre le membre et la collection de rails routes.rb
J'ai spécifié la version et les rails nouveaux, mais pour une raison quelconque, la dernière version est incluse ~
Quelle est la différence entre System Spec et Feature Spec?
Comment envoyer des transactions Ethereum Différence entre send et sendAsync
Différences entre les classes et les instances dans Ruby
Comparez la différence entre dockerfile avant et après docker-slim
[JAVA] Quelle est la différence entre interface et abstract? ?? ??
Quelle est la différence entre ignorer et en attente? [RSpec]
[Swift] UITextField m'a appris la différence entre nil et ""
[Java débutant] Différence entre la longueur et la longueur () ~ Je ne sais pas ~
Différence entre vh et%
[Rails] Je ne veux plus me perdre. Créez de nouveaux modèles, tables, contrôleurs et vues.
Je vais expliquer la différence entre le développement d'applications Android et le développement d'applications iOS du point de vue des ingénieurs iOS
J'ai essayé de comparer et de correspondre à des méthodes avec des fonctions similaires pour la différence entre le tableau Java et ArrayList.
[Rails] J'ai essayé d'utiliser la méthode button_to pour la première fois
Je veux appeler une méthode et compter le nombre
Je souhaite créer un formulaire pour sélectionner la catégorie [Rails]
[Java] Vérifiez la différence entre orElse et orElseGet avec IntStream
La différence entre la programmation qui utilise des classes Ruby et la programmation qui n'utilise pas
Différence entre produit et variante
Différence entre redirect_to et render
[Java] Différence entre == et égal