Ruby on rails 验证地理位置纬度和经度

Ruby on rails 验证地理位置纬度和经度,ruby-on-rails,validation,geocoding,Ruby On Rails,Validation,Geocoding,我有一个RubyonRails模型,带有纬度和经度属性 这应该得到验证。必须对其进行验证,以便: 这些值的格式正确。例如,48.8582和2.2945,但也包括48.8和2.2。应该允许任何精度。我将其存储为浮动,是否需要或建议进行任何附加验证 它们在有效范围(0-90)内。或者我应该允许负数,或者90以上和90以下的数字 我对这一点是否是一个实际有效的地址不感兴趣(sea、northpole等等,只要它是地球上的一个有效点) 我使用的是gem,但就目前而言,输入只是一对lat/lon文本字

我有一个RubyonRails模型,带有纬度和经度属性

这应该得到验证。必须对其进行验证,以便:

  • 这些值的格式正确。例如,48.8582和2.2945,但也包括48.8和2.2。应该允许任何精度。我将其存储为浮动,是否需要或建议进行任何附加验证
  • 它们在有效范围(0-90)内。或者我应该允许负数,或者90以上和90以下的数字
我对这一点是否是一个实际有效的地址不感兴趣(sea、northpole等等,只要它是地球上的一个有效点)


我使用的是gem,但就目前而言,输入只是一对lat/lon文本字段。Geocoder只是对这个问题感兴趣,因为它可能有实用方法(我找不到)来验证lat/long对。

我不知道Geocoder中有任何方法来检查这一点,但您可以使用rails验证

validates :latitude , numericality: { greater_than_or_equal_to:  -90, less_than_or_equal_to:  90 }
validates :longitude, numericality: { greater_than_or_equal_to: -180, less_than_or_equal_to: 180 }

在Rails 4及更高版本中,正确答案是:

validates :lat, numericality: { greater_than_or_equal_to: -90,  \
  less_than_or_equal_to: 90 }
validates :lng, numericality: { greater_than_or_equal_to: -180,  \
  less_than_or_equal_to: 180 }

注:颠倒验证器顺序不起作用的原因,即验证:lat,数值:{小于或等于:90,大于或等于:-90}