Rails验证与before_validation有关

时间:2010-06-05 16:13:31

标签: ruby-on-rails ruby validation

我还是相当新的铁杆,所以我不确定我在这里缺少什么。

我正在使用GeoKit在保存时对地址进行地理编码。我有一个地址对地址进行地理编码的方法,如果找不到,就会在错误列表中添加错误。我已经在控制台中对它进行了测试,它在地理编码上失败了(可能是添加错误),但仍然成功保存。

acts_as_mappable
before_validation_on_create :geocode_address
before_validation_on_update :geocode_address
validates_presence_of :street
validates_presence_of :city
validates_presence_of :state
validates_presence_of :zip
validates_presence_of :name
validates_uniqueness_of :name

 def geocode_address
    geo=Geokit::Geocoders::MultiGeocoder.geocode ("#{street}, #{city}, #{state}, #{zip}")
    puts "geocoded: #{street}, #{city}, #{state}, #{zip}"
    if geo.success
      self.lat, self.lng = geo.lat,geo.lng
    else
      errors.add(:street, "Could not Geocode address")
    end 
   puts "geo status: #{geo.success}"
 end

非常感谢任何帮助,谢谢:)

1 个答案:

答案 0 :(得分:3)

before_validation挂钩与实际验证不同。你试图把这两者结合起来。您仍然希望尝试在挂钩中创建地理编码,但使用单独的验证来确保它是正确的,并在那里执行errors.add