Uso de rubí en los carriles, ¿cómo puedo lograr un polimórfica has_many
relación en la que el propietario es siempre de un conocidos, pero los elementos de la asociación será de alguna polimórfico (pero homogénea) tipo, especificada por una columna de la ¿propietario? Por ejemplo, supongamos que los productos de la clase Producer
has_many
pero las instancias del productor en realidad pueden tener muchas bicicletas, paletas heladas o cordones de zapatos. Puedo hacer que cada clase de producto (bicicleta, paletas, etc.) tenga una relación belongs_to
con un productor, pero dado un ejemplo de productor, ¿cómo puedo obtener la colección de productos si son de diferentes tipos (por instancia de productor)?Rails has_many polimórfica
Las asociaciones polimórficas de Rails permiten a los productores pertenecer a muchos productos, pero necesito que la relación sea al revés. Por ejemplo:
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
Así que mi mesa Productor ya tiene una columna "tipo" que se corresponde con alguna clase de producto (por ejemplo, bicicletas, paleta, etc.), pero ¿cómo puedo obtener rieles que me deje hacer algo como:
>> bike_producer.products
#=> [[email protected], [email protected], ...]
>> popsicle_producer.products
#=> [[email protected], [email protected], ...]
Disculpe si esto es obvio o una repetición común; Estoy teniendo dificultades sorprendentes para lograrlo fácilmente.
Así como una nota, recomiendo fuertemente en contra del uso de la fábrica como un nombre de modelo, como factory_girl es una extensión muy comúnmente usado usado para la generación de modelos en vez de accesorios, y esto puede ser muy confuso para la gente que lee el código. –
@jamie - gracias por la sugerencia, cambié la terminología a "Productor", que ojalá no se confunda con ninguna biblioteca de concurrencia =) – maerics
No hay problema. Además, no he encontrado una buena solución para esto. Hasta donde yo sé, la capacidad de un objeto para tener hijos polimórficos aún no existe en Rails. Si desea consultar http://blog.hasmanythrough.com/2006/4/3/polymorphic-through como referencia. –