【问题标题】:Rails Multiplying value of afcolumn using ActiveRecordRails 使用 ActiveRecord 将 afcolumn 的值相乘
【发布时间】:2016-08-15 22:12:12
【问题描述】:

考虑到用户 ID,我想乘以特定列的值。

假设我有一个表 users 包含用户 1 (id 1) 和用户 2 (id 2),还有一个表 animals 包含 namemensal_cost

好的,然后我为用户 1(id 1)添加了两个动物,为用户 2(id 2)添加了 1 个动物

我想知道如何使用ActiveRecord 计算 3 个月后增加相同基值的mensal_cost 收入,这意味着我必须将实际值乘以 3。

我正在尝试这样的事情:

Animal.where(user_id: ?).sum('3*mensal_cost') 

由于我不知道可以存在多少用户,所以我必须编写一个调用,列出每个用户 id 3 个月后的数量。

【问题讨论】:

    标签: mysql ruby-on-rails activerecord console


    【解决方案1】:

    好的,你几乎是自己拥有它 - 只是小细节可以是这样的:

    user_ids = [id1, id2]
    full_sum = 3 * Animal.where(:user_id => user_ids).sum(:mensal_cost)
    

    注意:不要忘记求和后可以乘以 3,这与将每个乘以 3 相加相同,例如

    (3 * 2) + (3 * 3) + (3 * 4) == 3 * (2 + 3 + 4)

    或者您可以遍历用户以获得他们的个人总和,如下所示:

    mensal_sums = {}
    user_ids = [id1, id2]
    user_ids.each do |user_id|
       mensal_sums[user_id] = 3 * Animal.where(:user_id => user_id).sum(:mensal_cost)
    end
    
    puts mensal_sums
    => {id1 => 63, id2 => 27}
    

    编辑 还有一个你想要用户名的地方:

    mensal_sums = {}
    users = User.find([id1, id2])
    users.each do |user|
       mensal_sums[user.id] = {:user_name => user.name,
                               :sum => (3 * user.animals.sum(:mensal_cost)) }
    end
    
    puts mensal_sums
    => {id1 => {:user_name => "Bob Jones", :sum => 63},
        id2 => {:user_name => "cJane Brown", :sum =>27}
       }
    

    【讨论】:

    • Taryn,首先,谢谢你的回答。但是这种方式会给我所有用户的 mensal_cost 总和乘以 3。我真正需要的是:id1 mensal_cost * 3 = 300, id2 mensal_cost * 3 = 700...
    • 啊酷。是的,我明白你的意思。您可以遍历用户数组来构建它……在一个查询中可能有一种“group by”的方式来完成它,但迭代方式会很好地工作。我将添加一个示例。
    • 太棒了 :),您的示例 probab 将对我有很大帮助,因为现在我需要获取每个用户 ID 的用户名(在用户表中)。我想我可能需要做一些类似 User.joins(:animals)....这里我不知道如何构造一个哈希,我已经读过但没有明白:(
    • 当然 - 我要添加一点关于如何拉出用户并从他们那里获取动物的内容
    【解决方案2】:

    我刚刚想出了解决办法:

    Animal.group('user_id').sum('3*mensal_cost')
    

    小组是关键:D

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2021-02-15
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多