2011-04-24 38 views
1

「假」列在我TABEL我:的Rails必須建立在模型

rating_score => The current score 
ratings => The number of ratings which led to the score 

我想創建模型「假」列命名的評價是(rating_score /評級)。我可以在我的控制器中使用,以便在我看來和之後進行訂購。

我應該如何在我的模型中創建它?

+0

這些東西被稱爲'計算columns'或'計算列'。 – Zabba 2011-04-24 20:37:31

回答

2

請注意,您不能讓SQL查詢通過虛擬屬性對結果進行排序。 你所能做的僅僅是這樣定義的方法在你的模型:

def rating 
    rating_scope/ratings 
end 

和基於價值的紅寶石訂購您的結果集:

results.sort_by(&:rating) 
+0

如果您確實需要保留該值,請爲該值創建一個列(與您通常一樣),然後在模型的'before_save'過濾器中計算該值。 – Zabba 2011-04-24 20:39:02

+0

我有些情況下,我的評分欄是0.是否有問題? – 2011-04-24 20:39:58

+0

@tzown:你不能被零除,所以是的,這將是一個問題。只需在'rating'方法內檢查該案例(以及其他任何!),並根據需要返回一個值(例如'ratings == 0?0:rating_scope/ratings')。 – 2011-04-24 20:54:36