7

Estoy un poco confundido acerca de una asociación polimórfica que tengo. Necesito un modelo de artículo para tener una imagen de encabezado y muchas imágenes, pero quiero tener un solo modelo de imagen. Para hacer las cosas aún más confusas, el modelo de la imagen es polimórfico (para permitir que otros recursos tengan muchas imágenes).Asociación polimórfica con múltiples asociaciones en el mismo modelo

estoy usando esta asociación en mi artículo modelo:

class Article < ActiveRecord::Base 
    has_one :header_image, :as => :imageable 
    has_many :images, :as => :imageable 
end 

es esto posible? Gracias.

+6

has_one es azúcar sintáctico para has_many: limit => 1 –

+0

posible duplicado de [Rails Polymorphic Association con asociaciones múltiples en el mismo modelo] (http://stackoverflow.com/questions/2494452/rails-polymorphic-association-with -múltiples asociaciones-en-el-mismo-modelo) –

Respuesta

4

Sí. Eso es totalmente posible.

Es posible que deba especificar el nombre de clase header_image, ya que no se puede inferir. Incluir :dependent => :destroy también, para asegurar que las imágenes se destruyen si el artículo se retira

class Article < ActiveRecord::Base 
    has_one :header_image, :as => :imageable, :class_name => 'Image', :dependent => :destroy 
    has_many :images, :as => :imageable, :dependent => :destroy 
end 

luego en el otro extremo ...

class Image < ActiveRecord::Base 
    belongs_to :imageable, :polymorphic => true 
end 
+0

¡Eso es genial, gracias! –

+0

Llego cinco años tarde a la fiesta, pero para referencia futura vea [esta pregunta y respuesta] (http://stackoverflow.com/questions/2494452/rails-polymorphic-association-with-multiple-associations-on-the -mismo-modelo). – Sooie

+0

Pease cancela esto como la respuesta aceptada. Esta solución no funciona, vea el comentario anterior de @Sooie. La solución real está en: http://stackoverflow.com/questions/2494452/rails-polymorphic-association-with-multiple-associations-on-the-same-model – tommyalvarez

6

yo probamos este, pero luego vuelve header_image una de las imágenes . Simplemente porque la tabla de imágenes no especifica un tipo de uso de imagen diferente (header_image vs. image normal). Simplemente dice: imageable_type = Imagen para ambos usos. Entonces, si no hay información almacenada sobre el tipo de uso, ActiveRecord no puede diferenciar.

+0

Necesita herencia de tabla única – BlackTea

Cuestiones relacionadas