Для меня наиболее элегантным решением является использование условной проверки, основанной на том, был ли изменен атрибут geocoded_by (адрес).Вы можете сделать что-то подобное в обратном вызове "after_validation" модели, которую вы геокодируете, или поместить ее в любой обратный вызов Active Record, соответствующий вашим целям:
after_validation :geocode, :if => lambda{ |obj| obj.address_changed?}