Utilizzo di Ruby on Rails, come è possibile ottenere una relazione polimorfa has_many
in cui il proprietario è sempre noto ma gli elementi nell'associazione saranno di tipo polimorfico (ma omogeneo), specificato da una colonna nel proprietario? Ad esempio, supponiamo che la classe Producer
has_many
prodotti, ma le istanze dei produttori potrebbero in realtà hanno molte biciclette, o ghiaccioli, o lacci delle scarpe. Posso facilmente avere ogni classe di prodotto (biciclette, Popsicle, etc.) hanno una relazione belongs_to
ad un produttore, ma dato un esempio produttore come posso ottenere la collezione di prodotti, se sono di vario tipo (per esempio produttore)?Rails Polymorphic has_many
Rails associazioni polimorfiche consentono ai produttori di appartenere a molti prodotti, ma ho bisogno del rapporto di essere il contrario. Per esempio:
class Bicycle < ActiveRecord::Base
belongs_to :producer
end
class Popsicle < ActiveRecord::Base
belongs_to :producer
end
class Producer < ActiveRecord::Base
has_many :products, :polymorphic_column => :type # last part is made-up...
end
Quindi il mio tavolo produttore ha già una colonna "tipo" che corrisponde ad una certa classe di prodotto (ad esempio biciclette, Popsicle, ecc), ma come posso ottenere Rails di farmi fare qualcosa di simile:
>> bike_producer.products
#=> [[email protected], [email protected], ...]
>> popsicle_producer.products
#=> [[email protected], [email protected], ...]
Scusa se questo è ovvio o una ripetizione comune; Sto avendo difficoltà sorprendenti nel raggiungerlo facilmente.
Proprio come una nota, vi consiglio vivamente l'uso di fabbrica come un nome del modello, come factory_girl è un'estensione molto comunemente usato utilizzato per la generazione di modelli, invece di infissi, e questo può essere molto confusa per le persone che leggono il vostro codice. –
@jamie - grazie per il suggerimento, ho cambiato la terminologia in "Produttore", che si spera non venga confusa con nessuna libreria di concorrenza =) – maerics
Nessun problema. Inoltre, non ho trovato una buona soluzione a questo. Per quanto ne so, la capacità di un oggetto di avere figli polimorfici non esiste ancora in Rails. Puoi comunque controllare http://blog.hasmanythrough.com/2006/4/3/polymorphic-through per riferimento. –