2014-06-18 49 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