ActiveRecord tip: Contar elementos asociados con has_many

Mirando la presentación de Gregg Pollack en el Orlando Ruby User Group saque algunos tips que no conocia, porque en realidad no lo habia neceistado… pero que nunca viene mal saber.

Has_many, contar recursos asociados.

En mi caso tengo una clase forum.rb (has_many :topics) y topic.rb (belongs_to :forum) y lo que quiero hacer es saber cuantos topics tiene el forum x.

Es muy simple, pero no olvides darle el default = 0 porque las operaciones que hace son matematicas del tipo +1 y -1 lo que hace imposible sumarle 1 a NULL si no se especifica el default.


def self.up
add_column :forums, :topics_count, :integer, :default => 0
end

y finalmente en el modelo topics


belongs_to :forum, :counter_cache => true

Luego para obtener la cantidad de topics asociados a un foro:


Forum.find(:first).topics.size

Con lo anterior evitamos 1 query a la base de datos lo que es considerable si estamos en un loop.

Nota: Al final de la presentación de Gregg un pequeño howto de acts_as_taggable
Link | Gregg Pollack en el Ruby User Group

Guardado en: rubyonrails |

1 Comment

  • Saturday, 18 August 2007, 0:40

    Hay que destacar que los counter_cache sólo funcionan en modo producción.

Leave a comment

norellan