Rails - DELETE上的PG外键违规

gcs*_*str 4 ruby postgresql ruby-on-rails ruby-on-rails-4

我有一个应用程序,有VenuesClients.

每个场地都有很多客户:

class Venue < ActiveRecord::Base
  has_many :clients
end
Run Code Online (Sandbox Code Playgroud)

当我试图删除一些场地时,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
Run Code Online (Sandbox Code Playgroud)

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

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

bey*_*gan 10

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

has_many :clients, dependent: :nullify
Run Code Online (Sandbox Code Playgroud)