7

Jestem lekko zdezorientowany, jeśli chodzi o polimorficzne skojarzenia, jakie mam. Potrzebuję modelu artykułu, aby mieć obraz nagłówka i wiele obrazów, ale chcę mieć pojedynczy model obrazu. Aby jeszcze bardziej zagmatwać, model obrazu jest polimorficzny (aby inne zasoby mogły mieć wiele obrazów).Polimorficzne skojarzenie z wieloma skojarzeniami na tym samym modelu

Używam tego skojarzenia w moim artykule modelu

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

Czy to możliwe? Dzięki.

+6

ma_one jest synonimem cukru dla has_many: limit => 1 –

+0

możliwy duplikat [Rails Polymorphic Association z wieloma skojarzeniami na tym samym modelu] (http://stackoverflow.com/questions/2494452/rails-polymorphic-association-with -wielkie skojarzenia-na-tym-modelu) –

Odpowiedz

4

Tak. To całkowicie możliwe.

Może być konieczne określenie nazwy klasy dla header_image, ponieważ nie można jej wywnioskować. Obejmują :dependent => :destroy też, aby upewnić się, że obrazy są niszczone, jeśli artykuł jest usuwany

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

następnie na drugim końcu ...

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

To świetnie, dziękuję! –

+0

Mam pięć lat spóźnienia na imprezę, ale na przyszłość zobacz [to pytanie i odpowiedź] (http://stackoverflow.com/questions/2494452/rails-polymorphic-association-with-ultiple-associations-on- -same-model). – Sooie

+0

Pease anuluje to jako zaakceptowaną odpowiedź. To rozwiązanie nie działa, patrz komentarz powyżej @Sooie. Prawdziwe rozwiązanie to: http://stackoverflow.com/questions/2494452/rails-polymorphic-association-with-multiple-associations-on-tame-amame-model – tommyalvarez

6

próbowałem tego, ale potem header_image zwraca jeden z obrazów . Po prostu dlatego, że tabela obrazów nie określa innego typu użycia obrazu (header_image vs. normal image). Mówi po prostu: imageable_type = Obraz dla obu zastosowań. Więc jeśli nie ma żadnych informacji o typie użytkowania, ActiveRecord nie może rozróżnić.

+0

Potrzebujesz dziedziczenia pojedynczego stołu – BlackTea

Powiązane problemy