7

Sono leggermente confuso riguardo a un'associazione polimorfica che ho. Ho bisogno di un modello di articolo per avere un'immagine di intestazione e molte immagini, ma voglio avere un unico modello di immagine. Per rendere le cose ancora più confuse, il modello Immagine è polimorfico (per consentire ad altre risorse di avere molte immagini).Associazione polimorfica con più associazioni sullo stesso modello

sto usando questa associazione nel mio articolo modello:

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

è possibile? Grazie.

+6

has_one è zucchero sintattico per has_many: limit => 1 –

+0

possibile duplicato di [Rails Polymorphic Association con più associazioni sullo stesso modello] (http://stackoverflow.com/questions/2494452/rails-polymorphic-association-with -multiple-associations-sullo-stesso-modello) –

risposta

4

Sì. Questo è totalmente possibile.

Potrebbe essere necessario specificare il nome classe per header_image, in quanto non è possibile dedurre. Includere :dependent => :destroy troppo, al fine di garantire che le immagini vengono distrutte se l'articolo viene rimosso

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

poi l'altra estremità ...

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

Che bello, grazie! –

+0

Sono cinque anni in ritardo rispetto alla festa, ma per riferimento futuro vedi [questa domanda e risposta] (http://stackoverflow.com/questions/2494452/rails-polymorphic-association-with-multiple-associations-on-the -Stesso-modello). – Sooie

+0

Pease annullare come risposta accettata. Questa soluzione non funziona, vedi il commento sopra di @Sooie. La vera soluzione è in: http://stackoverflow.com/questions/2494452/rails-polymorphic-association-with-multiple-associations-on-the-same-model – tommyalvarez

6

Ho provato a farlo, ma poi header_image restituisce una delle immagini . Semplicemente perché la tabella delle immagini non specifica un diverso tipo di utilizzo dell'immagine (immagine_prima rispetto all'immagine normale). Dice semplicemente: imageable_type = Immagine per entrambi gli usi. Quindi se non ci sono informazioni memorizzate sul tipo di utilizzo, ActiveRecord non può differenziare.

+0

È necessaria l'ereditarietà di una tabella singola – BlackTea

Problemi correlati