2

当我尝试创建一个位置感知的新场地时,我收到以下错误。

ActiveRecord::StatementInvalid: PG::Error: ERROR:  new row for relation "venues" violates check constraint "enforce_srid_latlon"

这是我重新创建错误的方法。

v = Venue.create(:latlon => "POINT (43.245332 -85.4352332)")
v.save

我确实注意到在我的迁移中,我没有为 t.point :latlon 设置 :geographic => true 属性。这可能是导致我的问题的原因吗?如果是这样,如何在已经包含数据的列上将该标志设置为 true?

4

2 回答 2

3

正如 (Postgres) 错误消息告诉您的那样,新行将违反检查约束enforce_srid_latlon

查看检查约束的定义,您将得到答案。在psql中,您可以使用:

\d venues

或者,您可以从任何客户端使用此SQL 查询:

SELECT r.conname, pg_catalog.pg_get_constraintdef(r.oid, true)
FROM   pg_catalog.pg_constraint r
WHERE  r.conrelid = 'venues'::regclass
AND    r.contype = 'c'
ORDER  BY 1;

或者您可以使用像pgAdmin这样的 GUI 。

于 2012-07-11T19:22:26.900 回答
1

设置 SRID 的最简单方法是将 WKT 作为前缀添加到 EWKT(扩展众所周知的文本)中:

v = Venue.create(:latlon => "SRID=4326;POINT (43.245332 -85.4352332)")

我正在使用SRID=4326,因为看起来您有 WGS84 纬度/经度坐标,这是典型的。

于 2012-07-13T03:56:41.583 回答