Im avere un po 'di problema nella configurazione di Rails has_many: through: relazione polimorfica.Naming a Rails has_many: through: relazione polimorfa
Sono consapevole questo argomento è welldocumented su SO, ma penso che il mio problema è giù per il mio modello e nomi foreign_key al contrario di sintassi cioè penso che questo è un problema "Sono stato a guardare il codice troppo a lungo" quello richiede solo un altro set di occhi.
Comunque ho la seguente configurazione:
class Milestone < ActiveRecord::Base
has_many :responsible_items, :as => :responsibility
has_many :responsible, :through => :responsible_items
end
class ResponsibleItem < ActiveRecord::Base
belongs_to :responsible, :class_name => "User"
belongs_to :responsibility, :polymorphic => true
end
class User < ActiveRecord::Base
has_many :responsible_items, :foreign_key => :responsible_id
has_many :responsibilities, :through => :responsible_items
end
Questo sembra funzionare bene, senza errori, dal lato Milestone delle cose. Ad esempio, nel terminale posso scrivere:
Milestone.first.responsible
... e ottenere un insieme vuoto come mi aspetto.
Tuttavia, dal lato utente delle cose, in esecuzione:
User.first.responsibilities
... restituisce un errore AR:
ActiveRecord::HasManyThroughAssociationPolymorphicSourceError: Cannot have a has_many :through association 'User#responsibilities' on the polymorphic object 'Responsibility#responsibility'.
Sto assumendo il problema è qualcosa a che fare con il fatto che Mi riferisco alla relazione dell'utente come: responsabile. È giusto?
Qualsiasi aiuto sarebbe molto apprezzato, grazie.
quali sono i modelli che sono l'altro lato della relazione polimorfica? è solo una pietra miliare o qualsiasi altro modello? e quando stai facendo User.first.responsibilities ti aspetti di ottenere oggetti Milestone? appartiene a: responsabilità,: polimorfo => true – Abid
Ci saranno altri modelli nella relazione polimorfica ma Milestone è l'unico che ho costruito finora. Quando faccio 'User.first.responsibilities' mi aspetto che gli oggetti Milestone si. – Pete
Ah ok @Abid mi hai fatto riflettere con la tua domanda. Naturalmente non sarò in grado di estrarre una serie di "responsabilità" attraverso la relazione: polimorfica perché appartengono tutti a oggetti diversi. Di conseguenza, devo essere più specifico sul modello User e indicare quali responsabilità voglio cioè 'has_many: milestone_responsibilities,: through =>: responsible_items,: source =>: responsibility,: source_type => 'Milestone'' – Pete