web-dev-qa-db-fra.com

Option de suppression en cascade pour les références ou à la suppression

Dans Rails 4.2, lors de la création d'une table ou de l'ajout d'une référence via des références ou add_reference, comment spécifier que la clé étrangère doit être mise en cascade lors de la suppression.

Commande pour générer un échafaudage:

Rails g scaffold Child parent:references name:string

Migration résultante:

create_table :childs do |t|
  t.references :parent, index: true, foreign_key: true
  t.string :name

  t.timestamps null: false
end
20
WiredIn

Cela devrait marcher

create_table :childs do |t|
  t.references :parent, index: true, foreign_key: {on_delete: :cascade}
  t.string :name

  t.timestamps null: false
end

Selon ActiveRecord::ConnectionAdapters::TableDefinition#references, si un hachage est spécifié sur l'option foreign_key, il est directement transmis à la méthode foreign_key.

la source:

foreign_key(col.to_s.pluralize, foreign_key_options.is_a?(Hash) ? foreign_key_options : {}) if foreign_key_options
43
Kern Cheh

Notez également que si vous avez déjà configuré la table, vous pouvez générer une migration pour mettre à jour la clé foreign_key en procédant comme suit:

  def up
    remove_foreign_key :children, :parent
    add_foreign_key :children, :parent, on_delete: :cascade
  end

  def down
    remove_foreign_key :children, :parent
    add_foreign_key :children, :parent
  end
0
Andrew K