0

我有一個應用程序,用戶由其他用戶根據不同的特點進行審查。Rails - 如何平均列其中REVIEW_ID =用戶

現在,我得到一個列的平均值(假設列是「智能」和它的一個整數)

但問題是,我拉起的「智能」的平均值爲所有用戶。 我希望它是我正在查看的用戶的「智能」的平均值。

這裏是我的代碼現在: 用戶控制器:

 @user = User.find(params[:id]) 
    @smart = Review.average(:smart) 

用戶顯示視圖:

<%[email protected]%> 
+0

你可以更深入的「平均」範圍? –

+0

你是什麼意思? – user2756384

+1

@MattLeonard:'average'不是一個範圍,'average'是一個標準的ActiveRecord方法。 –

回答

2

fine Active Record Query Interface guide

9計算
[ ... ]
所有的計算方法直接在模型上工作:

Client.count 
# SELECT count(*) AS count_all FROM clients 

或者對關係:

Client.where(first_name: 'Ryan').count 
# SELECT count(*) AS count_all FROM clients WHERE (first_name = 'Ryan') 

注意上的關係例子。

如果要計算在列的子集的平均再這麼說:

@smart = Review.where(:user_id => params[:id]).average(:smart) 

甚至:

@smart = @user.reviews.average(:smart) 

如果你有協會成立。

+0

謝謝!代碼的第一行工作,而第二行沒有。我以爲我有我的關聯設置,但我想我沒有設置他們的權利。 – user2756384

+0

有沒有比'@kind = Review.where(:reviewed_id => params [:id])更好的方式來處理我的控制器中的邏輯 \t @honest = Review.where(:reviewed_id = >:params [:id])。average(:honest) \t @genuine = Review.where(:reviewed_id => params [:id])。average(:genuine) \t @fun = Review.where(:reviewed_id = >:params [:id])。average(:fun) \t @smart = Review.where(:reviewed_id => params [:id])。average(:smart) \t @cool = Review.where(:reviewed_id = > params [:id])。average(:cool)' – user2756384

+0

看起來效率不高並且重複性很差 – user2756384