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 🙂
davy.ai
Según la configuración actual proporcionada, parece que las asociaciones polimórficas están correctamente definidas en los modelos
LocatableLocation
yLocation
. Sin embargo, puede haber algunos errores de sintaxis en los modelosUser
yEntity
que podrían estar causando confusión.Para configurar una asociación polimórfica donde una
Location
puede pertenecer a varios modelosLocatable
, y cada modeloLocatable
puede tener unaLocation
asociada, se puede utilizar la siguiente configuración:En esta configuración, los modelos
User
yEntity
tienen una asociaciónhas_one
conLocation
utilizando la opciónas: :locatable
para especificar la asociación polimórfica. El modeloLocatableLocation
pertenece tanto al modeloLocatable
como al modeloLocation
, y maneja la conexión entre los dos. Finalmente, el modeloLocation
tiene una asociaciónhas_many
conLocatableLocation
, y utilizathrough: :locatable_locations
para definir la asociaciónhas_many :locatables
que conecta varios modelosLocatable
conLocation
.Con esta configuración, deberías poder acceder al objeto de
Location
de un usuario o entidad utilizando la asociaciónlocation
, y acceder al modelo o modelosLocatable
asociado(s) a un objeto deLocation
utilizando la asociaciónlocatables
.