代码之家  ›  专栏  ›  技术社区  ›  Chance

Rails验证问题

  •  1
  • Chance  · 技术社区  · 16 年前

    我对Rails还比较陌生,所以我不知道这里缺少什么。

    我正在使用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 回复  |  直到 16 年前
        1
  •  3
  •   x1a4    16 年前

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

    推荐文章