Je suis un débutant avec "super" qui se débat tous les jours avec les Rails. Partagez pour organiser vos propres connaissances.
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.
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.
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.
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
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.
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 ...
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.
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