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

在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