参考或删除时级联删除选项

时间:2015-05-10 18:02:16

标签: ruby-on-rails ruby-on-rails-4 database-migration

在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

2 个答案:

答案 0 :(得分:49)

这应该有效

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

答案 1 :(得分:1)

还请注意,如果您已经设置了表,则可以通过执行以下操作来生成迁移以更新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