¿Cuál es la mejor manera de asociar una Dirección a múltiples modelos en rieles?

Esta pregunta en SO parece estar relacionado con mi pregunta, pero no estoy seguro de que mi pregunta sea respondida por eso.

Una dirección puede pertenecer a más de un modelo (perfil de usuario y evento) ¿Cuál es la forma correcta de implementar esto?

Las tablas básicas:

user_profiles(id)
events(id)

Opciones para implementar eldirecciones mesa:

addresses(id,user_profile_id,event_id)
Este enfoque parece ser poco claro ya que si mañana la dirección debe pertenecer a un modelo más, tengo que agregar ese campo de identificación.
Además, aún no lo sé, pero ¿agregar un nuevo campo de identificación también puede causar que se rompa algún código?

addresses(id,model_type,model_id)
Esto es polimórfico, cierto. No sé por qué, pero de alguna manera me siento cauteloso.

¿Alguna otra forma de hacer esto?

Nota:

Podría haber hecho las tablas así, supongo:

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

Pero, esto significa que lo mismoaddress_id Puede pertenecer a diferentes modelos. Supongo que no debería ser así, porque digamos, por ejemplo, que la dirección del evento necesita ser cambiada, pero no debería afectar la dirección del evento.user_profile. Entonces eso sería algo como esto (que creo que está mal):

@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 

Respuestas a la pregunta(2)

Su respuesta a la pregunta