2011-05-10 29 views
1

我似乎無法找到一個這樣做的優雅方式。如何在ActiveRecord中查找完成百分比?

但是讓我們說我的模型Projects有很多Tasks

每個task都有一個布爾型字段complete

所以,如果我有10 tasks和4是「完整」,而6不是,那麼我只有40%完成。

scope中這樣做是否有一個很好的方法來使SQL變得精益?

我已經有兩個範圍,如:

scope :complete, lambda { 
    where("tasks.complete = true") 
    } 

    scope :not_complete, lambda { 
    where("tasks.complete = false") 
    } 

感謝您的任何提示。

回答

2

我會認爲,因爲你正在尋求最終的價值,所以模型方法是最好的方法。在模型中你可以

def percent_complete 
    not_complete.size.to_f/complete.size.to_f 
end 

或者,如果您需要big_decimal和big_decimail/UTIL:(範圍應以支持鏈接返回一個關係)你可以使用這些示波器返回完成百分比,沿着東西線使用to_d來獲得十進制除法。然後在你看來,你所要做的就是@ project.percent_complete

+0

感謝提醒我關於鏈接和關係。我將它改爲:def self.percent_complete c = complete.size.to_f n = not_complete.size.to_f 如果c == 0則返回0 0 如果n == 0返回100 0 not_complete.size.to_f/complete。 size.to_f 結束 – cbmeeks 2011-05-11 01:53:34