Rails - DELETE上的PG外键违规

时间:2016-03-22 08:59:22

标签: ruby-on-rails ruby postgresql ruby-on-rails-4

我的应用程序包含VenuesClients

每个场地都有很多客户:

class Venue < ActiveRecord::Base
  has_many :clients
end

当我尝试删除一些场地时,Postgres抱怨外键约束违规:

PG::ForeignKeyViolation: ERROR: update or delete on table "venues" violates foreign key constraint "fk_rails_3afaf2f5fc" on table "clients" DETAIL: Key (id)=(3) is still referenced from table "clients". : DELETE FROM "venues" WHERE "venues"."id" = $1

通过向关联添加dependent: :destroy来解决这个问题很简单。

但我想留住客户,即使他们没有更多的场地。

1 个答案:

答案 0 :(得分:10)

您可以使用nullify。它会将客户端上的venue_id设置为null。但是您需要从列中删除外键约束。

has_many :clients, dependent: :nullify