You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails升级改写Squeel语法报Symbol与100无法比较错误如何解决

Ruby on Rails升级Squeel语法改写报错求助

背景说明

我正在将名为Emissions Gateway的程序升级到新版本Ruby on Rails。原有方法使用了Squeel gem的语法,改写时遇到了问题,折腾了4个多小时仍未解决。

相关代码与表结构

datalogger.rb 模型schema与相关方法

# == Schema Information
#
# Table name: dataloggers
#
#  id                    :integer          not null, primary key
#  project_id            :integer
#  created_at            :datetime         not null
#  updated_at            :datetime         not null
#  original_file_name    :string(255)
#  original_content_type :string(255)
#  original_file_size    :integer
#  original_updated_at   :datetime
#  status                :string(255)      default("incomplete")
#  hours                 :integer
#  readings_total        :integer
#  readings_start        :datetime
#  readings_stop         :datetime
#  direct_upload_url     :string(255)
#  version               :string(255)
#  comments              :string(255)
#  bypass                :boolean          default(FALSE)
#  device_id             :integer
#  device_name           :string(255)
#  device_description    :string(255)
#  device_serial         :integer
#  md5                   :string(255)
#  user_id               :integer
#  reported_at           :datetime
#  user_reported_id      :integer
#  reported              :boolean

def stats(temperatures)
    unless bypass
      @temperatures = temperatures
      @stats = {}

      @cumulative_percent_at = 0
      @cumulative_readings = 0

      @temperatures.each_cons(2) do |current_n, next_n|
        # puts "Evaluating #{current_n} and #{next_n}"
        @stats["#{next_n}"] = {}

        # CHANGED v0.009 9/27/2021 Scott Milella
        # readings_at = readings.where{(temperature.gt current_n) & (temperature.lteq next_n)}.sum(:frequency)
        readings_at = Reading.where(:temperature > current_n).and(:temperature <= next_n).sum(:frequency)
        @stats["#{next_n}"][:readings] = readings_at
        # puts "Readings at: #{readings_at}"

        # @cumulative_readings = @stats.map{|_, v| v[:readings] }.sum
        # puts "Cumulative Readings: #{cumulative_readings}"

        percent_at = ((readings_at.to_f / readings_total) * 100 )
        @stats["#{next_n}"][:time_at] = percent_at
        @cumulative_percent_at += percent_at
        # puts "Percent at: #{percent_at}%"

        # puts "Cumulative Percent at: #{@cumulative_percent_at}"

        percent_over = 100 - @cumulative_percent_at
        @stats["#{next_n}"][:over] = percent_over
        # puts "Percent Over: #{percent_over}%"

        # puts "Progress: #{@cumulative_readings}/#{readings_total} readings"
      end
    end

修改的问题代码行

readings_at = Reading.where(:temperature > current_n)
.and(:temperature <= next_n).sum(:frequency)      

报错信息

修改后运行报comparison of Symbol with 100 failed错误,完全无法理解该报错,因为:temperature符号对应的是Reading模型的整数字段。

Reading模型表结构与定义

# == Schema Information
#
# Table name: readings
#
#  id            :integer          not null, primary key
#  temperature   :integer
#  frequency     :integer
#  datalogger_id :integer
#

class Reading < ActiveRecord::Base
  belongs_to :datalogger
  attr_accessible :frequency, :temperature, :datalogger_id

  validates_presence_of :frequency, :temperature, :datalogger_id
end

排查情况

不明白为什么两个整数无法比较,是否是语法写错了?运行没有报语法错误,但尝试了上千种写法,还出现过> not found in Array等各类错误。目前问题仅出现在这个方法中,若需要完整的datalogger.rb模型代码可后续提供。

以下是旧版正常运行的Emissions Gateway中截取的SQL日志,其中272是current_n的值、150是next_n的值,已在better_errors控制台验证过这两个值正确。暂不确定问题原因,猜测可能和不熟悉的each_cons方法有关。

格式化后的SQL日志

2021-09-27T18:50:49.173173+00:00 app[web.1]:  (1.5ms)  SELECT SUM("readings"."frequency") 
AS sum_id FROM "readings" 
WHERE "readings"."datalogger_id" = 272 
AND (("readings"."temperature" > 100 
AND "readings"."temperature" <= 150))

原始SQL日志

2021-09-27T18:50:49.173173+00:00 app[web.1]:  (1.5ms)  SELECT SUM("readings"."frequency") AS sum_id FROM "readings" WHERE "readings"."datalogger_id" = 272 AND (("readings"."temperature" > 100 AND "readings"."temperature" <= 150))

求助

希望大家能帮忙指出该方法的正确改写方式,折腾了好几个小时毫无进展,十分感谢。
我真的希望这个gem从来没有被开发过,它给我带来了太多麻烦!
谢谢,Scott


内容的提问来源于stack exchange,提问作者Scott Milella

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:18:02