2010-06-01 19 views
5

Makaleler ile ilgili olarak en üstteki n kategorisini bulmaya çalışıyorum, ikisi arasında kurulan bir habtm ilişkisi var. Bu, yürütmek istediğim SQL'dir, ancak find_by_sql yöntemini kullanmanın dışında ActiveRecord ile bunu nasıl yapacağınızdan emin değilim.Gelişmiş sayımı ve Rails'e katılma

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; 

cevap

9

Aynı sorguyu elde etmek seçenekleri ile find kullanabilirsiniz:: ActiveRecord yöntemlerle bunu yapmanın bir yolu var mı

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

Mükemmel sayesinde, onu denedim ama açıkçası yanlış bir şey olduğunu sanıyordum – trobrock

+0

Daha sonra sayım değerine erişmenin herhangi bir yolu var mı? kategori = Category.find (...). category.counter'? –