Has_many a través de Rails mientras asigna diferentes roles

Estoy tratando de crear una relación entre direcciones y viajes, y no estoy seguro de cómo configurar la relación.

Cada viaje tendrá dos direcciones: la dirección de inicio y la dirección de finalización. Las direcciones se pueden utilizar en muchos viajes diferentes, y pueden ser la dirección de inicio o la dirección de finalización dependiendo del viaje. Lo que imagino es que cuando los usuarios están creando un nuevo viaje, pueden seleccionar desde un menú desplegable de todas sus direcciones, para que puedan hacer un viaje desde su dirección llamada, digamos, "inicio" a su dirección llamada, digamos, "aeropuerto. "

Ya existe una relación polimórfica establecida entre direcciones (como localizables) con algunos otros modelos en la aplicación, pero en este caso la misma dirección debe pertenecer a dos modelos diferentes (el usuario y el viaje). ¿Sería una buena solución una tabla de unión polimórfica? Incluso si eso resolviera el problema, una vez que conectó dos direcciones diferentes a los viajes, ¿cuál es la mejor manera de distinguir la dirección inicial de la dirección final?

Gracias por cualquier sugerencia!

Edición: He implementado todo lo siguiente por hakunin, pero aún no puedo encontrar una manera de hacer que la función funcione. Decidí usarfields_for para construir elTripLocation objetos para cadaTrip, pero no puedo averiguar qué poner en el controlador. Cuando puse

def new
  @trip = Trip.new
  @trip.origin_trip_location.build
  @trip.destination_trip_location.build
end

Me sale el errorundefined method build for nil:NilClass. Estaba pensando en usar solo@trip.trip_location.build En cambio, pero luego me sale el errorundefined method trip_locations for #<Trip:0x007f5a847f94b0> Porque en el modelo de Trip no se dice.has_many :trip_locations. Simplemente usando regularhas_many :trip_locations He podido ingresar toda la información necesaria en la tabla de unión utilizando el asistente de formulariosfields_for :trip_locations y diciendo que un viajehas_many :trip_locations, pero luego no tengo ningún método para consultar y encontrar qué dirección tiene el booleano en la tabla de combinación establecida como verdadera y cuál la tiene establecida como falsa. Si pudiera resolver ese problema, estaría listo, creo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta