Вам по крайней мере нужно получить список данных города / штата, например, из geonames.org или zipcodeworld.com. Затем вам нужно будет сопоставить города со штатами, штаты со странами, а затем придумать, как их отобразить, как на сайте haystack.com. Я полагаю, что рейтинг самых популярных городов определяется либо количеством пользователей, которые запрашивали каждый город, либо просто предполагаемыми популярными городами.
В основном это будет просто информация о том, как вы связываете каждый из этих типов данных (город, штат, страна). На самом деле показать, кроме как выложить все это, просто. В основном, в вашей БД есть таблица городов, штатов и стран, а затем создайте модели, например:
class Country
has_many :states
end
class State
belongs_to :country
has_many :cities
end
class City
belongs_to :state
end
EDIT:
Чтобы связать его с пользователями: если предположить, что пользователь может принадлежать только одному городу (хотя с несколькими также не составит особого труда), он будет выглядеть примерно так:
class User
belongs_to :city
end
class City
belongs_to :state
has_many :users
end
Вы должны быть в состоянии сделать что-то вроде:
usr = User.find(a_user_id)
usr.city #New York City
usr.city.state #New York
usr.city.state.country #United States