2014-06-18 72 views
1

我有兩種型號:Rails4範圍從兩個表選擇數據和求和結果

模型/ user.rb

class User < ActiveRecord::Base 
    has_many :points, dependent: :destroy 
end 

模型/ point.rb

class Point < ActiveRecord::Base 
    belongs_to :user 
end 

我想創建一個scope,總和特定用戶擁有的點數。

在SQL看起來像這樣:

SELECT SUM(p.amount)FROM用戶爲u左連接AS p個點ON p.user_id = u.id其中u.id = 121;

的範圍可以從用戶控制器這樣調用:

@total_points = @users.total_points(params[:user_id]) if params[:user_id].present? 

任何想法?

回答

3

在這種情況下最好使用實例方法,而不是範圍或類方法。

添加此方法user.rb

def total_points 
    points.sum(:amount) 
end 

你可以這樣調用它

@user = User.find(params[:user_id]) 
@total_points = @user.total_points