Qual a melhor forma de associar um endereço a vários modelos em trilhos?

Essa questão no SO parece estar relacionado à minha pergunta, mas não tenho certeza de que minha pergunta seja respondida por ela.

Um endereço pode pertencer a mais de um modelo (UserProfile e Event) Qual é a maneira correta de implementar isso?

As tabelas básicas:

user_profiles(id)
events(id)

Opções para implementar oendereços mesa:

addresses(id,user_profile_id,event_id)
Essa abordagem parece esquisita, pois se amanhã o endereço precisar pertencer a mais um modelo, eu tenho que adicionar esse campo id.
Além disso, ainda não sei, mas adicionar um novo campo de identificação pode causar a quebra de algum código também?

addresses(id,model_type,model_id)
Isso é polimórfico, certo. Não sei por que, mas me sinto cautelosa com isso de alguma forma?

Alguma outra maneira de fazer isso?

Nota:

Eu poderia ter feito as tabelas assim, suponho:

user_profiles(id,address_id)
events(id,address_id)

Mas isso significa que o mesmoaddress_id pode pertencer a diferentes modelos. Suponho que não deva ser assim, porque digamos, por exemplo, que o endereço do evento precisa ser alterado, mas não deve afetar o endereço douser_profile. Então, seria algo assim (o que acho errado):

@current_user_profile.address = some_new_address
#this would have changed the address for both the user_profile *and* the event
@current_user_profile.save 

questionAnswers(2)

yourAnswerToTheQuestion