Rails select 在执行 SQL 时未给出正确的记录

问题描述 投票:0回答:1

我使用下面的

TIMESTAMPDIFF
查询在选择中使用
ActiveRecord
,但它没有给出正确的结果。

1. 
Job.where(id: [1,2])
  .group(:user_level)
  .select("user_level, SUM((TIMESTAMPDIFF(MINUTE, start_datetime, end_datetime) - unpaid_break_time) / 60 * hourly_rate) AS income")

2.
Job.select("user_level, SUM((TIMESTAMPDIFF(MINUTE, start_datetime, end_datetime) -  unpaid_break_time) / 60 * hourly_rate) as income")
               .where(id: [1,2]).group(:user_level)

3.
Job.find_by_sql("
  SELECT user_level, SUM((TIMESTAMPDIFF(MINUTE, start_datetime,end_datetime) -  unpaid_break_time)/60 * hourly_rate) as income
  FROM jobs
  WHERE id IN (1,2)
  GROUP BY user_level
")

所有三个都给出相同的结果,即

[#<Job id: nil, user_level: 0.33e1>] 

预期:

[{user_level: 0.33e1, income: 34}]

如果我在

Workbench
中执行上面3条生成的SQL,我得到了正确的结果。所以,查询是正确的。

另外,如果我使用

pluck
而不是
select
,我会得到正确的结果,但在数组中,
pluck
返回数组。

Job.where(id: [1,2]).group(:user_level)
   .pluck("user_level, sum(((TIMESTAMPDIFF(MINUTE, start_datetime,end_datetime) -  unpaid_break_time)/60 * hourly_rate)) as income")

那么,如何使用

Select
来获得预期的输出呢?

注意:上面的查询中,id: 1,2只是举例,实际的id是不同的。

mysql ruby-on-rails activerecord ruby-on-rails-5.1
1个回答
0
投票

您是否尝试在工作中打电话给

.income
(
#<Job id: nil, user_level: 0.33e1>
)?

Rails 获取所有返回的列并将它们分配给记录,但仅显示模型在控制台显示的默认

.inspect
中实际具有的属性。

在工作中拨打

.attributes
也应该会给你带来哈希收入。

© www.soinside.com 2019 - 2024. All rights reserved.