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
これはうまくいくはずです
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
また、すでにテーブルを設定している場合は、次のようにして、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