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 :

on_delete cascade n'est pas pris en compte dans mysql


Sujet :

Ruby on Rails

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Points : 46
    Points
    46
    Par défaut on_delete cascade n'est pas pris en compte dans mysql
    bonjour à tous

    j'ai utilisé un module helper trouvé sr le web pour rajouter des options sur mes contraintes d'intégrité entre mes tables projects et clients :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    module MigrationHelper
     
      def add_foreign_key(from_table, from_column, to_table, options = {})
     
        to_column = options.fetch(:to_column, 'id')
        suffix = options[:suffix]
        on_delete = options[:delete]
        on_update = options[:update]
     
        on_delete = 'SET NULL' if on_delete == :set_null
        on_update = 'CASCADE' if on_update == :cascade
     
        constraint_name = "fk_#{from_table}_#{to_table}"
        constraint_name += "_#{suffix}" unless suffix.nil?
        sql = "ALTER TABLE #{from_table} "
        sql += "ADD CONSTRAINT #{constraint_name} "
        sql += "FOREIGN KEY (#{from_column}) REFERENCES #{to_table}(#{to_column}) "
        sql += "ON DELETE #{on_delete} " if on_delete
        sql += "ON UPDATE #{on_update}" if on_update
        execute sql
      end
     
      def remove_foreign_key(from_table, to_table, suffix = nil)
        constraint_name = "fk_#{from_table}_#{to_table}"
        constraint_name += "_#{suffix}" unless suffix.nil?
     
        # note, you may have to use DROP KEY here - see MySQL docs for details
        execute "ALTER TABLE #{from_table} DROP FOREIGN KEY #{constraint_name}"
      end
    end
    ActiveRecord::Migration.extend(MigrationHelper)
    Voici les modèles et migration de mes 2 tables clients et projects :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    class CreateClients < ActiveRecord::Migration
      def change
        create_table :clients do |t|
          t.string  :ident
          t.string  :lastname, :default=>''
          t.text    :comment    
            # cles etrangeres
          t.belongs_to :project, :index=>true
          t.timestamps           
        end
          add_foreign_key :clients, :project_id, :projects, on_delete: :cascade
      end
     
    end
     
    class Client < ActiveRecord::Base
      belongs_to  :project
    end
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class CreateProjects < ActiveRecord::Migration
      def change
        create_table :projects do |t|
          t.string :name
          t.timestamps
        end
      end
    end
     
    class Project < ActiveRecord::Base
      has_many :clients
    end
    Quand je regarde la structure de ma table clients dans phpmyadmin, CASCADE n'est pas pris en compte

    Nom : Capture.PNG
Affichages : 103
Taille : 37,1 Ko

    Avez vous une idée ?

    Merci par avance

    Ma Config
    • windows 7
    • wamp server 3.0.6 32 bits
    • rails 4.17
    • ruby 2.2

  2. #2
    Membre extrêmement actif
    Avatar de Madmac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    1 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 685
    Points : 1 376
    Points
    1 376
    Billets dans le blog
    7
    Par défaut
    Le code ne venait pas avec un exemple ?

    C'est peut-être la notation qui est en faute. C'est peut-être un truc comme: options[:delete] = :cascade

    OU

    add_foreign_key :clients, :project_id, :projects, on_delete :cascade

Discussions similaires

  1. \s n'est pas pris en compte dans mon regex
    Par xess91 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/03/2010, 17h13
  2. Réponses: 10
    Dernier message: 28/01/2010, 12h01
  3. Réponses: 5
    Dernier message: 01/07/2006, 12h52
  4. Mon script cron n'est pas pris en compte
    Par tomnie dans le forum Linux
    Réponses: 11
    Dernier message: 31/03/2004, 11h19

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