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
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
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