If you have before_validation :geocode
callback you can improve your geocode
method to cache heavy code results this way:
def geocode
@geocode_results ||= {}
# suppose geocoding depends on `lat_lon` attribute
@geocode_results[lat_lon] ||= begin
# Your heavy code here
end
end
Caching as hash value lets redo geocoding when lat_lon changes.