我使用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等)
原文地址:https://www.jb51.cc/postgresql/191696.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。