2010/7/30 Fernando Parra <[email protected]>:
> Estimados Rubyists!!
>
> Les presento el problema. A continuación los modelos que forman parte de mi
> app:
>
> Worker
> Skill
> Subcategory
> Category
>
> Una categoría puede tener muchos workers a través de skills y
> subcategories, y un worker puede a su vez, pertenecer a más de una
> categoría siguiendo la misma lógica.
> Lo que quiero hacer, es filtrar workers que pertenezcan a ciertas
> categorías y agruparlas en un Hash, como esto:
> [<#Category1>] => [<#Worker1>, <#Worker2, .... ].
>
> Lo que pude hacer, es filtrar workers por categorías de la siguiente forma:
> Worker.all(:joins => { :skills => :subcategory}, :conditions =>
> ['subcategories.category_id IN (?)', 1])
>
> Se les ocurre como debería hacer la agrupación por categoría?
> Lamentablemente con el código de arriba, si encadeno un método
> group_by o lo que fuera, lo estaría trabajando sobre un array de
> objetos del tipo Worker y no dispondría del category_id que se obtiene
> al hacer el join (y en lo posible quisiera evitar cosas como
> find_by_sql).
Proba seleccionar la columna usando la opción :select
all = Worker.all(:joins => { :skills => :subcategory}, :conditions =>
['subcategories.category_id IN (?)', 1], :select => "workers.*,
subcategories.category_id as category_id")
con eso tendrías que poder hacer algo como:
all.first.category_id
o si no
all.first.attributes["category_id"]
Si eso funciona, finalmente podrías hacer:
all.group_by(&:category_id)
Igual, se me hace que te vendría bien desnormalizar (un habtm
"workers_categories" por ej)
>
> Desde ya,
> Muchas gracias!
> _______________________________________________
> Ruby mailing list
> [email protected]
> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
>
--
--------------------------------------------------------------
EmmanuelOga.com - Software Developer
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar