参考级联删除或删除时的选项
Posted
技术标签:
【中文标题】参考级联删除或删除时的选项【英文标题】:Option for Cascade Delete for References or On Delete 【发布时间】:2015-07-21 04:44:38 【问题描述】:在 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
【问题讨论】:
【参考方案1】:这应该可以工作
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
【讨论】:
【参考方案2】:另请注意,如果您已经设置了表,则可以通过执行以下操作生成迁移以更新 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
【讨论】:
以上是关于参考级联删除或删除时的选项的主要内容,如果未能解决你的问题,请参考以下文章