取决于::destroy导致PostgreSQL错误

Jer*_*ome 3 ruby-on-rails-3.2 postgresql-9.3

class Accdist < ActiveRecord::Base
  has_many :accdistlavoraziones, dependent: :destroy
Run Code Online (Sandbox Code Playgroud)

删除accdist时,控制台将输出以下内容:

 Accdist Load (27.3ms)  SELECT "accdists".* FROM "accdists" WHERE "accdists"."id" = $1 LIMIT 1  [["id", "1"]]
 Accdistlavorazione Load (20.2ms)  SELECT "accdistlavoraziones".* FROM "accdistlavoraziones" WHERE "accdistlavoraziones"."accdist_id" = 1
  SQL (59.7ms)  DELETE FROM "accdistlavoraziones" WHERE "accdistlavoraziones"."" = $1  [[nil, nil]]
PG::SyntaxError: ERROR:  zero-length delimited identifier at or near """"
LINE 1: ...OM "accdistlavoraziones" WHERE "accdistlavoraziones"."" = $1
                                                                ^
: DELETE FROM "accdistlavoraziones" WHERE "accdistlavoraziones"."" = $1
   (0.1ms)  ROLLBACK
Completed 500 Internal Server Error in 155.3ms
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果我查询:

Accdistlavorazione.where('accdist_id = ?', 1).count
   (0.6ms)  SELECT COUNT(*) FROM "accdistlavoraziones" WHERE (accdist_id = 1)
 => 10
Run Code Online (Sandbox Code Playgroud)

返回有效结果。

为什么内部机制导致postgresql处理nil(s)?

Jer*_*ome 5

对于遇到此问题的任何人,可能发生的情况如下。
-通过rails快捷方式创建联接表has_and_belongs_to_many
-意识到您稍后需要进行has_many ... through:设置
-创建新联接记录的过程实际上正在运行...因为[...]_id正在引用。
–删除时间到了,您正在寻找连接表的ID,这自然是nil