2010-06-01 12 views
5

Sto cercando di trovare il numero più alto di n categorie in relazione agli articoli, c'è una relazione di habtm tra i due. Questo è l'SQL che voglio eseguire, ma non sono sicuro di come farlo con ActiveRecord, a parte l'utilizzo del metodo find_by_sql. c'è un modo di fare questo con i metodi ActiveRecord:Conteggio avanzato e join in 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; 

risposta

9

È possibile utilizzare find con le opzioni per ottenere la stessa query:

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

eccellenti grazie, pensò ho provato ma ovviamente ho avuto qualcosa di sbagliato in it – trobrock

+0

Qualche modo per accedere successivamente al valore di conteggio? 'category = Category.find (...). primo; category.counter'? –