【问题标题】: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

【问题讨论】:

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


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-21
        • 1970-01-01
        相关资源
        最近更新 更多