【问题标题】:Rails4 scope that selects data from two tables and sums the result从两个表中选择数据并对结果求和的 Rails4 范围
【发布时间】:2014-06-18 09:26:49
【问题描述】:

我有两个模型:

model/user.rb

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

model/point.rb

class Point < ActiveRecord::Base
  belongs_to :user
end

我想创建一个 scope 来计算特定用户拥有的点数。

sql 如下所示:

SELECT SUM(p.amount) FROM users AS u LEFT JOIN points AS p ON p.user_id = u.id 其中 u.id = 121;

范围可以像这样从用户控制器调用:

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

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    在这种情况下最好使用实例方法,而不是作用域或类方法。

    将此方法添加到user.rb

    def total_points
      points.sum(:amount)
    end
    

    你可以这样称呼它

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

    【讨论】:

      猜你喜欢
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多