Tengo la entidad Envío que hace referencia a la entidad Dirección dos veces, por ejemplo:
y el modelo de envío es el siguiente perteneciente dos veces a la entidad de dirección (address_from, address_to):
class Shipment < ApplicationRecord belongs_to :address_from, :class_name => 'Address' belongs_to :address_to, :class_name => 'Address' endpero no tengo muy claro como se vería al otro lado del modelo de relación
class Address < ApplicationRecord has_one :shipment endSi fuera una relación entre envío y dirección sería la siguiente:
rails g model Address rails g model Shipment address:referencespero no tengo muy claro como relacionarlos dos veces en este caso
Cualquier consejo sería muy apreciado, gracias.
En realidad, no puede usar una sola asociación aquí, ya que ActiveRecord no admite asociaciones en las que la clave externa podría estar en una de dos columnas. Cada has_one / has_many corresponde a una sola columna de clave externa en el lado inverso.
En su lugar, necesita una asociación en Dirección para cada clave externa en Envío:
class Shipment < ApplicationRecord belongs_to :address_from, class_name: 'Address', inverse_of: :outgoing_shipments belongs_to :address_to, class_name: 'Address', inverse_of: :incoming_shipments end class Address < ApplicationRecord has_many :outgoing_shipments, class_name: 'Shipment', foreign_key: :address_from_id, inverse_of: :address_from has_many :incoming_shipments, class_name: 'Shipment', foreign_key: :address_to_id, inverse_of: :address_to end Si bien podría usar has_one aquí, debe tener en cuenta que no hay nada que impida que una dirección tenga múltiples shipments.address_from_id a menos que agregue restricciones de exclusividad en shippings.address_from_id y shipments.address_to_id y validaciones. Sin embargo, no estoy seguro de por qué querrías esto.