[RUBY] [Rails] Que faire lorsque vous souhaitez générer une erreur qui ne peut pas être annulée lorsque des restrictions de clé externe sont appliquées

introduction

Je souhaite déclencher une exception ou une erreur lorsque l'enregistrement associé existe lors de la suppression d'un enregistrement. C'est une situation où l'élément parent ne doit pas être effacé s'il est utilisé dans la clé externe.

Lorsque j'essaye de le supprimer, un écran d'erreur Ruby apparaît.

Cause

C'était parce qu'il n'y avait pas de définition du comportement pour le modèle associé à «Model». Le fichier de migration «clé étrangère: True» n'était pas suffisant.

Contre-mesures

Il a été résolu en écrivant l'option "dépendante" dans le "Modèle". Écrivez ce qui suit pour le modèle pertinent.

#Modèle appelé contrat
class Contract < ApplicationRecord
  has_many :...., dependent: :restrict_with_error

end

En écrivant dependante :: restrict_with_error après la description de l'association, il était possible d'afficher l'erreur lorsque destory ne peut pas être effectué. Les conditions suivantes ont été remplies et résolues! ..


#Contrôleur de modèle appelé contrat
def destroy
    contract = Contract.find(params[:id])
    if contract.destroy
      redirect_to contract_path, notice: "Supprimé le contrat sélectionné"
    else
      redirect_to contract_path, alert: "Ne peut pas être supprimé car il est en cours d'utilisation"
    end
end

référence

・ Https://dorarep.page/articles/rails-dependent#dependent_restrict_with_exception_restrict_with_error

Recommended Posts

[Rails] Que faire lorsque vous souhaitez générer une erreur qui ne peut pas être annulée lorsque des restrictions de clé externe sont appliquées
[Rails] Que faire lorsque les rails db: migrate ne peuvent pas être effectués car aucune table n'est référencée par la clé externe
<Installation par points> Que faire si vous ne pouvez pas continuer en raison d'une erreur lors de la création d'un environnement de développement pour l'apprentissage Rails.
[Ubuntu] Que faire lorsque MongoDB ne peut pas être démarré en raison d'une erreur SocketException
Que faire si le message "Un serveur est déjà en cours d'exécution" s'affiche. Erreur lors de la tentative de démarrage du serveur rails
Après avoir installé le gemfile'devise''bootstrap 'avec des rails, que faire lorsque l'url est une erreur
Que faire si vous obtenez une erreur indiquant "Veuillez saisir une valeur valide" lors de l'obtention avec Rails datetime_field
Que faire si le message d'erreur "Impossible de trouver un moteur d'exécution JavaScript" s'affiche lors du démarrage du serveur rails
[Rails] Que faire si vous ne pouvez pas obtenir de message d'erreur avec la méthode des erreurs
Que faire si vous obtenez une erreur avec l'authentification de base pendant le code de test Rails
Que faire lorsque CentOS ne peut pas être démarré avec VirtualBox sur Catalina
Que faire si une erreur se produit lorsque nokogiri entre lors de l'installation du bundle
[Rails] Que faire si vous obtenez une erreur indiquant "Impossible de trouver un moteur d'exécution JavaScript." Lors de l'exécution de la commande rails dans Catalina
Lorsque vous souhaitez notifier une erreur quelque part lors de l'utilisation de graphql-spring-boot avec Spring Boot
Que faire si l'installation de ffi échoue lors du lancement d'une application dans Rails
[Rails / Peut-être que cela peut être appliqué à d'autres choses? ] Que faire si échec / erreur __send__ (fichier de méthode) rspec ne peut pas conduire un tel fichier apparaît lors de l'exécution de RSpec
Qu'utilisez-vous lors de la conversion en String?
[React.useRef] Que faire lorsque le dernier état ne peut pas être référencé dans l'écouteur d'événements
Que faire si vous ne trouvez pas votre clé API après le déploiement sur Rails Heroku
Je ne peux pas déployer! Résoudre une erreur qui ne peut pas être poussée vers heroku (Tutoriel Rails Chapitre 1)
Que faire lorsqu'une erreur se produit dans les rails db: migrate ((StandardError: Une erreur s'est produite, cette migration et toutes les migrations ultérieures annulées :))
Que faire si vous obtenez une erreur (StandardError: Une erreur s'est produite, cette migration et toutes les migrations ultérieures ont été annulées :) dans rails db: migrate
Que faire si le serveur rails ne peut pas être arrêté
Que faire si une erreur ActionController :: UnknownFormat se produit
Un livre d'introduction à lire lors du démarrage de Rails
Erreur ExecJS :: RuntimeUnavailable: que faire quand cela se produit
Que faire si le référentiel Git ne peut pas être affiché dans Azure Team Explorer pour Eclipse
[Tutoriel Rails Chapitre 2] Que faire lorsque vous faites une erreur dans le nom de la colonne
Que faire si vous obtenez une erreur «302» dans le code de test du contrôleur dans Rails
[Rails 6] Que faire lorsqu'une erreur de modèle manquante se produit après l'introduction du haml [Super facile]
Que faire si vous obtenez une erreur indiquant Impossible de trouver un baseurl valide pour le dépôt lorsque vous utilisez le menu fixe yum -y install dans le cours udemy à l'aide de CentOS7
Que faire lorsque vous ne pouvez pas appliquer d'opérateurs d'expression à la liaison de méthode
Que faire si la commande adb ne peut pas être exécutée
Que faire si la commande rails devient inutilisable
[Rails] Que faire lorsque l'erreur Aucune base de données sélectionnée et Base de données inconnue apparaît dans db: migrate
Que faire si vous vous déconnectez en raison d'une erreur de certificat SSL lors de l'exécution de Jenkins sur votre Mac
Évitez le problème que la session ne peut pas être obtenue lorsque Canary est libéré lors de la mise à niveau de Rails 4.2.x vers 5.0.x
Que faire lorsque vous souhaitez connaître la position source où la méthode est définie dans binding.pry
Que faire si une erreur d'authentification de clé SSH se produit lors du déploiement automatique sur EC2 avec Capistrano
Que faire si vous obtenez une erreur de bibliothèque partagée JNI lorsque vous essayez de créer avec Eclipse
Que faire si vous obtenez une [Une requête HTTP a pris trop de temps à se terminer.] Erreur dans Docker.
Que faire à propos de l'erreur "Impossible de lire ou n'est pas un fichier ZIP valide"