postgresql – ERROR:零长度分隔标识符在“”“或”附近“LINE 1:DELETE FROM”regions“WHERE”regions“.”“= $1

我使用Rails 4.1和 Postgresql(与PG宝石)作为我的数据库.我有一个非常多的公司到省份的协会,有一个名为“区域”的连接表.现在显然,region表没有主键,因为我使用了{:id =>假}.但是当我尝试使用依赖于破坏或只是简单地在区域对象上调用destroy它自己得到这个错误
ERROR:  zero-length delimited identifier at or near """"
 LINE 1: DELETE FROM "regions" WHERE "regions"."" = $1

我知道问题是由于缺少区域表的主键而导致的.而且奇怪的是,如果我将主键添加回表,破坏工作正常,没有错误.但是,如果我从表中删除主键,则会出现错误.我知道这与postgres有关,但我不知道如何解决这个问题,而无需为我的region表添加一个主键列.

这是实际的查询

[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
尝试设置依赖::delete_all代替.

示例(不完全确定您如何设置多对多关系).

# models/region.rb

has_many :provinces_regions,dependent: :delete_all
has_many :provinces,through: :provinces_regions

:destroy /:destroy_all将通过调用它们的destroy方法删除关联的对象,从而回调(:before_destroy,after_destroy等)

:delete /:delete_all将删除关联对象而不调用其destroy方法.

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...