2013-05-13 133 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