Ассоциация has_and_belongs_to_many была создана именно для этой ситуации. Вот документация по нему: http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many
В противном случае, если вам нужно хранить информацию о самой ассоциации (поля, которые не существуют в таблице города или пользовательской таблице, но между ними), вы можете просто установить две параллельные ассоциации has_many_through, и создать отдельную таблицу 'user_city'. Так было бы в пользовательской таблице
has_many :user_cities
has_many :cities, :through => :user_cities
и в таблице городов
has_many :user_cities
has_many :users, :through => :user_cities
Затем вы МОЖЕТЕ просто позвонить: user.cities и получить список городов, в которых живет пользователь.