Я думаю, что наличие стран и почтовых индексов является излишним, не мешало бы. В вашей таблице стран есть адрес, город, штат, почтовый индекс, страна, лат и lng.
Затем используйте GeoKit для геокодирования вашего адреса в лат / лнг, если ваш адрес обновлен до сохранения.
Тогда вы можете быть удивительным и говорить что-то вроде (найдите все предприятия в пределах 10 миль от этого адреса)
Business.within.find(:all, :origin=>'100 Spear st, San Francisco, CA', :within=>10)
Ресурсы: