Vedere i commenti per gli aggiornamenti.Rotaie: molte o molte relazioni polimorfiche
Ho faticato per ottenere una risposta chiara e diretta su questo, spero che questa volta lo prendo! : D Ho ancora molto da imparare ancora con Rails, tuttavia capisco il problema che sto affrontando e apprezzerei davvero un ulteriore aiuto.
- Ho un modello chiamato "Attività".
- Ho un modello astratto chiamato "Target".
- Vorrei mettere in relazione più istanze di sottoclassi di Destinazione su Attività.
- Non utilizzo l'ereditarietà di una tabella singola.
- Vorrei interrogare la relazione polimorfica per restituire un set di risultati misto di sottoclassi di Target.
- Vorrei interrogare singole istanze di sottoclassi di Target per ottenere attività con le quali sono in relazione.
Quindi, immagino che una relazione polimorfa da molti a molti tra Attività e sottoclassi di Obiettivi sia in ordine. Più in dettaglio, sarò in grado di fare cose come questa nella console (e ovviamente altrove):
task = Task.find(1)
task.targets
[...array of all the subclasses of Target here...]
Ma! Supponendo modelli "Store", "Software", "Office", "veicolo", che sono tutte le sottoclassi di "Target" esistere, sarebbe bello per attraversare anche il rapporto nella direzione opposta:
store = Store.find(1)
store.tasks
[...array of all the Tasks this Store is related to...]
software = Software.find(18)
software.tasks
[...array of all the Tasks this Software is related to...]
Il tabelle di database implicite da rapporti polimorfi sembra essere in grado di fare questo attraversamento, ma vedo alcuni temi ricorrenti nel tentativo di trovare una risposta che mi sconfiggere lo spirito di relazioni polimorfici:
- Utilizzando ancora, compare il mio esempio persone volere definire Store, Software, Office, Vehicle in Task, che possiamo dire subito non è un rapporto polimorfo come lo restituisce solo un tipo di modello.
- Analogamente all'ultimo punto, le persone desiderano ancora definire Store, Software, Office e Vehicle in Task in una forma o forma. Il punto importante qui è che la relazione è cieca rispetto alla sottoclasse. Inizialmente, i miei polimorfi verranno interagiti solo come Target, non come singoli tipi di sottoclassi. La definizione di ciascuna sottoclasse nell'attività ricomincia a consumare lo scopo della relazione polimorfica.
- Vedo che un modello per la tabella di join potrebbe essere in ordine, a me sembra un po 'corretto, tranne per il fatto che aggiunge una certa complessità. Presumo che Rails sarebbe disposto a farla finita. Mi sento inesperto su questo.
Sembra essere un piccolo buco nella funzionalità di binari o nella conoscenza collettiva della comunità. Quindi speriamo che StackOverflow possa cronologicamente la mia ricerca della risposta!
Grazie a tutti coloro che aiutano!
Nei tuoi sei punti elenco, cinque di loro sono banali da realizzare se si lascia cadere la sesta, "Io non sto usando l'ereditarietà singola tabella". Per quanto riguarda il punto su STI di seguito, dal momento che le colonne in più ti infastidiscono, considera l'utilizzo della delega per distribuire i dati e il comportamento aggiuntivi ad altri modelli. – austinfromboston
Spingendola verso l'esterno è ciò che ha provocato questo. STI però non è un'opzione. Vorrei che fosse perché, sì ... Ognuno è un grande fan di esso. Ma voglio che i dati archiviati siano coerenti e ci saranno diversi tipi di target. Ancora mi sorprende che non ci sia un modo per estrarre una raccolta mista come questa. Il mio design sembra abbastanza solido. –
Sono stato in grado di realizzare la maggior parte delle funzionalità che desidero attraverso l'utilizzo di has_many_polymorphs. L'unica limitazione rimanente è che sono ancora bloccato definendo ogni tipo polimorfico nel mio genitore (Attività). Altre soluzioni sono le benvenute, ma non sono sicuro che una soluzione ci raggiungerà fino a quando una nuova versione di binari o un aggiornamento di has_many_polymorphs! –