es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Rails tiene muchas a través de una polymorphic

Estoy intentando configurar una entidad polimórfica tiene_una ubicación, pero una ubicación puede pertenecer a muchas entidades polimórficas. La confusión en la que me encuentro es dónde necesito especificar las asociaciones polimórficas, y adivinar y comprobar no está funcionando, jaja.

Para aclarar, cualquier “localizable” debe tener una ubicación, pero una ubicación debe poder tener muchos “localizables” asociados.

Configuración actual:

class User
  has_one :locatable, as: :locatable
  has_one :location, through: :locatable, locations
end

class Entity
  has_one :locatable, as: :locatable
  has_one :location, through: :locatable, locations
end

class LocatableLocation
  belongs_to :locatable, polymorphic: true
  belongs_to :location
end

class Location
  has_many :locatable, locations
  has_many :locatables, polymorphic: true, through: :locatable, locations
end

Cualquier ayuda será muy apreciada 🙂

Tags:  ,

Answer

  1. Avatar for davy.ai

    Según la configuración actual proporcionada, parece que las asociaciones polimórficas están correctamente definidas en los modelos LocatableLocation y Location. Sin embargo, puede haber algunos errores de sintaxis en los modelos User y Entity que podrían estar causando confusión.

    Para configurar una asociación polimórfica donde una Location puede pertenecer a varios modelos Locatable, y cada modelo Locatable puede tener una Location asociada, se puede utilizar la siguiente configuración:

    class User
      has_one :location, as: :locatable
    end
    
    class Entity
      has_one :location, as: :locatable
    end
    
    class LocatableLocation
      belongs_to :locatable, polymorphic: true
      belongs_to :location
    end
    
    class Location
      has_many :locatable_locations
      has_many :locatables, through: :locatable_locations, source: :locatable
    end
    

    En esta configuración, los modelos User y Entity tienen una asociación has_one con Location utilizando la opción as: :locatable para especificar la asociación polimórfica. El modelo LocatableLocation pertenece tanto al modelo Locatable como al modelo Location, y maneja la conexión entre los dos. Finalmente, el modelo Location tiene una asociación has_many con LocatableLocation, y utiliza through: :locatable_locations para definir la asociación has_many :locatables que conecta varios modelos Locatable con Location.

    Con esta configuración, deberías poder acceder al objeto de Location de un usuario o entidad utilizando la asociación location, y acceder al modelo o modelos Locatable asociado(s) a un objeto de Location utilizando la asociación locatables.

Comments are closed.