web-dev-qa-db-ja.com

参照のカスケード削除または削除時のオプション

Rails 4.2では、テーブルを作成するとき、または参照またはadd_referenceを介して参照を追加するときに、削除時に外部キーをカスケードするように指定する方法を教えてください。

足場を生成するコマンド:

Rails g scaffold Child parent:references name:string

結果の移行:

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

  t.timestamps null: false
end
28
WiredIn

これはうまくいくはずです

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

  t.timestamps null: false
end

ActiveRecord::ConnectionAdapters::TableDefinition#referencesによると、ハッシュがforeign_keyオプションで指定されている場合、ハッシュはforeign_keyメソッドに直接渡されます。

ソース:

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

また、すでにテーブルを設定している場合は、次のようにして、foreign_keyを更新するマイグレーションを生成できます。

  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
2
Andrew K