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

Rails select is not giving the correct record while executing SQL

提问人:Chakreshwar Sharma 提问时间:8/14/2023 更新时间:8/14/2023 访问量:21

问:

我正在使用以下查询进行选择,但它没有给出正确的结果。TIMESTAMPDIFFActiveRecord

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}]

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

另外,如果我使用 ,而不是 ,我得到了正确的结果,但在 Array 中返回数组。pluckselectpluck

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 活动记录 ruby-on-rails-5.1

评论


答:

0赞 Siim Liiser 8/14/2023 #1

你试过打电话给工作吗()?.income#<Job id: nil, user_level: 0.33e1>

Rails 获取所有返回的列并将它们分配给记录,但仅显示模型在控制台显示的默认值中实际具有的属性。.inspect

打电话给这份工作也应该给你一个哈希的收入。.attributes