在Rails控制台中,我试图在模型中调用一个方法,该方法返回用户订单数量的总和。
方法是:
def self.user_total(current_user)
quantity = UserOrder.select("sum(quantity)").where(user_id: current_user)
quantity
end
如果我在Rails控制台中运行Order.user_total(1)
,它将返回:
#<ActiveRecord::Relation [#<UserOrder id: nil>]>
但是,生成的SQL是正确的:
SELECT sum(quantity) FROM "user_orders"
WHERE "user_orders"."user_id" = $1 LIMIT $2
[["user_id", 1], ["LIMIT", 11]]
如果我在dbconsole中运行SQL,它将返回正确的总和:
SELECT sum(quantity) FROM user_orders
WHERE user_orders.user_id = 1;
=> 115
如果我删除where约束,它也会返回#<ActiveRecord::Relation [#<UserOrder id: nil>]>
。
在rails控制台中,如果我只是生成简单的SQL查询以查找所有数量,它将返回
irb(main):005:0> UserOrder.select("quantity")
UserOrder Load (0.4ms) SELECT "user_orders"."quantity" FROM "user_orders" LIMIT $1 [["LIMIT", 11]]
=> #<ActiveRecord::Relation [
#<UserOrder id: nil, quantity: 1>
, #<UserOrder id: nil, quantity: 1>
, #<UserOrder id: nil, quantity: 1>
, #<UserOrder id: nil, quantity: 1>
, #<UserOrder id: nil, quantity: 1>
, #<UserOrder id: nil, quantity: 8>
, #<UserOrder id: nil, quantity: 102>
]>
所以我可以看到UserOrder id: nil
的来源,但是同时为什么它会返回那个“列”(因为缺少更好的词),而不是返回其中的数量或总和其他例子?
答案 0 :(得分:3)
有一种查询总和的方法:
UserOrder.where(user_id: current_user).sum(:quantity)
作为样式要点,我想说在模型层中命名自变量current_user
是没有意义的,因为它不关心被查询的用户是“当前”用户登录用户或其他用户。