[RUBY] [Rails / Active Record] À propos de la différence entre créer et créer!

Aperçu

À propos de la méthode ActiveRecord create '' qui crée un nouvel enregistrement. J'ai appris la différence entre créer '' et `` créer! '', Donc je vais l'expliquer.


Conclusion: s'il faut lever une exception

Quelle est la différence avec et sans ! ''? Conclusion "S'il faut soulever une exception" ``.

Cependant, il est difficile de comprendre l '«exception». Pour expliquer la différence qui se produit réellement, ce qui change avec ou sans ! '' Est "Cet écran rouge apparaît-il?" `` Lorsque le processus échoue.


Dans le cas de `` create! ''

Si vous définissez `` create! '', Si vous êtes pris dans la validation, une exception ActiveRecord :: RecordInvalid se produira comme indiqué ci-dessous, et l'écran familier sera affiché.

domo

Suivons l'opération réelle.

Le code utilisé cette fois est le suivant (* La description de l'action de création n'est pas recommandée).

① Routage

app/config/routes.rb


Rails.application.routes.draw do
  root to: 'comments#index'
  resources :comments, only: [:create]
end
  1. Soumettez une valeur vide sous la forme index.html.erb
  2. Demander des commentaires # create

② Exécuter les commentaires # créer une action

app/controllers/comments_controller.rb


class CommentsController < ApplicationController

  def index
    @comments = Comment.all.order("created_at DESC")
    @comment = Comment.new
  end

  def create
    #L'écriture de cette action de création est déconseillée.
    @comment = Comment.create!(comment_params)
    redirect_to root_path
  end

  private

  def comment_params
    params.require(:comment).permit(:text)
  end
end
  1. Chargez la méthode ActiveRecord `` create (new + save) ''
  2. Obtenez les paramètres avec comment_params (la valeur de la colonne de texte est vide)
  3. Vérification de validation dans la partie sauvegarde de create

③ Vérification de validation avec le modèle Comment

app/models/comment.rb


class Comment < ApplicationRecord
  validates :text, presence: true
end
  1. Il reste bloqué dans le jeu de validation dans la colonne de texte
  2. Une exception se produit car elle ne peut pas être enregistrée
  3. Cet écran rouge s'affiche

✔ GIF qui suit le flux ci-dessus

L'écran d'erreur était affiché fermement.

demo


Sans ``! ''

Soumettez le formulaire pour l'action de création ci-dessous.

app/controllers/comments_controller.rb


def create
  @comment = Comment.create(comment_params) # !Exclure
  redirect_to root_path
end

✔ Opération dans ce cas (GIF)

L'écran d'erreur ne s'affiche pas en raison de la gestion des exceptions et vous êtes redirigé.

demo


Sommaire


référence

Recommended Posts

[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
À propos de la différence entre irb et pry
[Rails] Différence entre la méthode de création et la méthode nouvelle + sauvegarde
[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.
[Ruby] J'ai réfléchi à la différence entre each_with_index et each.with_index
Différences entre les classes et les instances dans Ruby
[Rails] Quelle est la différence entre la redirection et le rendu?
[Rails] Différence entre find et find_by
[rails] Différence entre redirect_to et render
[Rails] Quelle est la différence entre l'installation et la mise à jour du bundle?
[Rails] Différence entre redirect_to et render [Débutant]
Différences entre gets et gets.chomp (autres que les sauts de ligne)
[Java] Comprendre la différence entre List et Set
[Rails] Différence de comportement entre delegate et has_many-through dans le cas de one-to-one-to-many
[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
Un mémo sur le flux de Rails et Vue
Différence entre vh et%
Différence entre i ++ et ++ i
Quelle est la différence entre System Spec et Feature Spec?
Différence entre nouveau et créer dans le contrôleur d'action Rais
À propos de la relation entre les méthodes HTTP, les actions et CRUD
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 ""
Différence entre produit et variante
Différence entre redirect_to et render
[Java] Différence entre == et égal
Différence entre redirect_to et render
Différence entre CUI et GUI
Différence entre les variables et les variables d'instance
Différence entre mockito-core et mockito-all
À peu près la même et la même valeur
Différence entre classe et instance
Différence entre l'installation de bundle et de bundle
Différence entre ArrayList et LinkedList
Différence entre render et redirect_to
Différence entre List et ArrayList
Différence entre .bashrc et .bash_profile
Différence entre StringBuilder et StringBuffer
Différence entre render et redirect_to
[Java] Remarque sur la différence entre le jugement d'équivalence et le jugement d'égalité lors de la comparaison de classes String
Différence entre Java et JavaScript (comment trouver la moyenne)