我使用Rails 4.1和Postgresql (带有PG gem)作为我的数据库。我有一个非常多的多对多关联,从公司到省份,都有一个称为区域的连接表。很明显,regions表没有主键,因为我使用了{ :id => false }。但是,当我尝试在region对象本身上使用depending或简单地调用destroy时,我得到了这个错误:
ERROR: zero-length delimited identifier at or near """"
LINE 1: DELETE FROM "regions" WHERE "regions"."" = $1我知道这个问题是由于缺少regions表的主键造成的。奇怪的是,如果我将主键重新添加到表中,destroy就可以正常工作,而且没有错误。但是,如果我从表中删除主键,错误又回来了。我知道这与postgres有关,但我不知道如何在不向regions表添加主键列的情况下解决此问题。
以下是实际的查询
[DEBUG] [AdminUser Load (0.4ms) SELECT "admin_users".* FROM "admin_users" WHERE "admin_users"."id" = 1 ORDER BY "admin_users"."id" ASC LIMIT 1] (pid:29655)
[DEBUG] [Province Load (0.2ms) SELECT "provinces".* FROM "provinces" WHERE "provinces"."id" = $1 LIMIT 1 [["id", 5]]] (pid:29655)
[DEBUG] [ (0.1ms) BEGIN] (pid:29655)
[DEBUG] [Region Load (0.3ms) SELECT "regions".* FROM "regions" WHERE "regions"."province_id" = $1 [["province_id", 5]]] (pid:29655)
[ERROR] [PG::SyntaxError: ERROR: zero-length delimited identifier at or near """"
LINE 1: DELETE FROM "regions" WHERE "regions"."" = $1发布于 2015-05-30 14:17:24
您希望在空字符串两边使用单引号而不是双引号,双引号是分隔的标识符,"“不是有意义的标识符。
尝试:
WHERE 'regions'.'' = $1或者至少:
WHERE "regions".'' = $1发布于 2014-09-25 11:28:06
请尝试设置dependent: :delete_all。
示例(不完全确定如何设置多对多关系)。
模型/区域.rb...
has_many :provinces_regions,从属::delete_all
has_many :省份,通过::provinces_regions
...
:destroy/:destroy_all将通过调用相关联的对象的destroy方法来删除它们,从而调用回调(:before_destroy、:after_destroy等)。
:delete/:delete_all将删除关联的对象,而不调用它们的销毁方法。
发布于 2019-07-28 17:30:15
基于Alex Carol的答案,但完全不同的解决方案。
如果有人这么做了:
# models/region.rb
...
has_many :provinces_regions, dependent: :destroy_all
has_many :provinces, through: :provinces_regions
...得到了这个问题,那么我猜你可能会像这样添加id: false:
create_table :provinces_regions, id: false do |t|
t.belongs_to :regions, index: true
t.belongs_to :provinces, index: true
end如果上述情况属实,则Rails正在尝试在销毁之前使用id运行回调。所以,给它一个id
create_table :provinces_regions do |t|
t.belongs_to :regions, index: true
t.belongs_to :provinces, index: true
end因此,您可以继续使用dependent: :destroy_all,并使用回调和其他需要id的特性。
在这个阶段,您需要进行一个新的迁移来纠正它。因此,正如侯赛因所说,你应该进行迁移:
add_column :provinces_regions, :id, :primary_key有关更多详细信息,请参阅here。
https://stackoverflow.com/questions/23165282
复制相似问题