2013-05-13 109 views
0

这是一个普遍的问题:如果我想验证街道地址的唯一性,并且想确保像“drive”和“dr”这样的语义相同性在验证中被计为相同的事物,我如何/在哪里宣布这种平等的验证?验证街道地址的唯一性

+0

在模型中?你在哪里期待更具体的答案? – jason328 2013-05-13 01:10:18

回答

1

您需要以某种方式规范这些地址。我推荐geocoder gem与谷歌。

+0

谷歌地理编码器不错,但它在许多农村地区(从经验来说)严重失败。 – dbenhur 2013-05-13 02:32:57

+0

不像菲律宾邮局那样糟糕(也来自经验):) – pguardiario 2013-05-13 03:47:18

+0

好的,所以我想的是类似于用户输入地址,使用地理编码器计算纬度和经度,使用纬度和经度返回谷歌的地址(因此按照Google的惯例进行规范化),然后执行保存? – Zephyr4434 2013-05-13 14:51:25

0

您可以在模型中使用validates :address, :uniqueness => true

为了确保语义平等,最好的办法是在保存并将所有“dr”转换为“drive”之前进行一些清理,将所有2个空格转换为1个空间,然后将其转换为类似的东西。

但我怀疑你会成功与此!你为什么不使用邮政编码,邮政编码或任何被称为?这应该是一个地址的uniq标识符,那么你为什么不使用它?

+1

在美国,ZIP + 4代码不能唯一标识一个地址。如果您倾斜头部并斜视,您可能会声称它们唯一标识邮件投递“区域”。但“区域”可能从一栋房子到数英亩的公寓或购物中心。 – 2013-05-13 01:34:54

1

这是一个不平凡的问题。你不打算用关于规范化地址的adhoc规则列表来解决它。如果你想做得很好,你应该找到一个USPS认证的Coding Accuracy Support System (CASS) library并用它来规范你的地址。

+0

OP从来没有真正提到这些是美国地址 – pguardiario 2013-05-13 02:28:25

+0

@pguardiario够正确。我确信地址规范化在非美国地区也很艰难,我会推荐其他国家的邮政服务作为如何做好这项工作的权威机构。 – dbenhur 2013-05-13 02:31:56