IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

Supprimer une entrée d'une table sans casser les relations


Sujet :

Ruby on Rails

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 87
    Points
    87
    Par défaut Supprimer une entrée d'une table sans casser les relations
    Bonjour à tous,

    Soit par exemple une table personnes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id nom prenom adresse commune_id
    et une table communes

    Rail prévoit-il quelque chose pour éviter qu'on efface une commune s'il existe une personne habitant cette commune ? Donc une entrée dans la table personnes où personnes.commune_id=communes.id

    Faute de quoi, toutes les requêtes portant sur une jointure entre ces tables donneront des erreurs.

    J'imagine que c'est un problème très commun

    Merci d'avance,

    G.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 172
    Points : 219
    Points
    219
    Par défaut
    Bonjour,

    Citation Envoyé par gvdmoort Voir le message
    Rail prévoit-il quelque chose pour éviter qu'on efface une commune s'il existe une personne habitant cette commune ? Donc une entrée dans la table personnes où personnes.commune_id=communes.id

    Faute de quoi, toutes les requêtes portant sur une jointure entre ces tables donneront des erreurs.
    Ce que tu peux faire, c'est t'assurer que toutes les personnes de la commune seront supprimée si tu supprimes la commune. Ainsi tu n'auras pas d'erreur de jointure (ajoute à ton association l'option ':dependent => :destroy').
    Ensuite, si tu veux interdire la suppression d'une commune contenant des personnes, tu peux faire le test dans ta méthode "delete" (pour réaffecter les personnes à une autre commune par exemple) ou bien avec une callback "before_destroy" (pour l'interdire systématiquement)

    Mais effectivement, si tu n'active pas la suppression en cascade ou que tu n'interdit pas la suppression de commune non vide, Rails de remontera une erreur.

  3. #3
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    dans ton modèle communes, tu va rajouter ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      def before_destroy
        unless personnes.empty?
          false
        end
      end

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 87
    Points
    87
    Par défaut
    Bonjour,

    Pourrais-tu en dire un peu plus à ce sujet:

    Citation Envoyé par Côme Voir le message
    (ajoute à ton association l'option ':dependent => :destroy'
    J'ai cru qu'il s'agissait d'une ligne à ajouter au modèle commune.rb, où les relations sont définies entre les tables:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class Commune < ActiveRecord::Base
      has_many :personne
      dependent :destroy
    Mais ça génère une erreur.

  5. #5
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    d'après la doc :

    # :dependent - if set to :destroy all the associated objects are destroyed alongside this object by calling their destroy method. If set to :delete_all all associated objects are deleted without calling their destroy method. If set to :nullify all associated objects’ foreign keys are set to NULL without calling their save callbacks. NOTE: :dependent => true is deprecated and has been replaced with :dependent => :destroy. May not be set if :exclusively_dependent is also set.

    # :exclusively_dependent - Deprecated; equivalent to :dependent => :delete_all. If set to true all the associated object are deleted in one SQL statement without having their before_destroy callback run. This should only be used on associations that depend solely on this class and don‘t need to do any clean-up in before_destroy. The upside is that it‘s much faster, especially if there‘s a counter_cache involved. May not be set if :dependent is also set.
    exemple d'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    has_many :comments, :dependent => :nullify

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 13h59
  2. [AC-2002] Modifier les noms des tables sans casser les requêtes
    Par gandalf20000000 dans le forum Modélisation
    Réponses: 5
    Dernier message: 07/04/2010, 22h30
  3. Réponses: 4
    Dernier message: 15/10/2009, 14h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 14h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo