代码之家  ›  专栏  ›  技术社区  ›  matt_dev

我可以在Rails中设置级联删除吗?

  •  71
  • matt_dev  · 技术社区  · 16 年前

    我知道这可能是在互联网上的某个地方,但我在Stackoverflow上找不到答案,所以我想我可以在这里增加一点知识库。

    我很难改变我的思维方式,从“模型”设计应用程序,而不是从数据库设计应用程序,因此我试图找出如何在Rails模型中完成我在数据库中经典地完成的所有设计工作。

    因此,我给自己的最新任务是弄清楚如何配置Rails数据库模型来执行级联删除?有没有一个简单的方法可以做到这一点?或者我必须进入MySql并进行设置?

    5 回复  |  直到 6 年前
        1
  •  109
  •   thomasfedb    7 年前

    您还可以将:dependent选项设置为:delete_all.:delete_all将发出一条SQL语句来删除所有子记录。因此,使用:delete_all可能会提供更好的性能。

    has_many :memberships, dependent: :delete_all
    
        2
  •  68
  •   Dorian    8 年前

    是的,你可以,如果你使用的是像你一样的关系,你就这么做

    has_many :memberships, dependent: :destroy
    
        3
  •  31
  •   thomasfedb    7 年前

    如建议的答案所示,请执行以下操作:

    has_many :memberships, dependent: :delete_all
    

    foreign_key 在一次迁移中。这样,数据库会自动为您删除记录。

    add_foreign_key :users, :memberships, on_delete: :nullify
    

    您还可以在删除成员资格时删除所有模型

    add_foreign_key :users, :memberships, on_delete: :cascade
    
        4
  •  10
  •   Jarin Udom    16 年前

    请记住,delete_all不会对子记录执行任何回调(如销毁前和销毁后)。

        5
  •  6
  •   Sean McMains    16 年前

    http://www.redhillonrails.org/foreign_key_migrations.html

    在迁移中使用该格式的格式如下:

    create_table :orders do |t|
      t.column :customer_id, :integer, :on_delete => :set_null, :on_update => :cascade
      ...
    end
    
    推荐文章