2010-06-01 13 views
5

Estoy tratando de encontrar la parte superior de n número de categorías relacionadas con los artículos, existe una relación habtm establecida entre las dos. Este es el SQL que quiero ejecutar, pero no estoy seguro de cómo hacer esto con ActiveRecord, además de usar el método find_by_sql. ¿hay alguna manera de hacer esto con métodos ActiveRecord:Cuenta avanzada y unión en Rails

SELECT 
    "categories".id, 
    "categories".name, 
    count("articles".id) as counter 
FROM "categories" 
JOIN "articles_categories" 
    ON "articles_categories".category_id = "categories".id 
JOIN "articles" 
    ON "articles".id = "articles_categories".article_id 
GROUP BY "categories".id 
ORDER BY counter DESC 
LIMIT 5; 

Respuesta

9

Usted puede utilizar find con opciones para lograr la misma consulta:

Category.find(:all, 
    :select => '"categories".id, "categories".name, count("articles".id) as counter', 
    :joins => :articles, 
    :group => '"categories".id', 
    :order => 'counter DESC', 
    :limit => 5 
) 
+0

excelente gracias, pensó que he intentado pero obviamente tenía algo mal en Es – trobrock

+0

Cualquier forma de acceder al valor de conteo después? 'category = Category.find (...). first; category.counter'? –