2010/7/30 Emmanuel Oga <[email protected]>:
> 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
>

Exacto. Eso era lo que necesitaba.

Gracias Ema y Diego por las respuestas.
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a