Rails - 查询将负十进制值视为正数

gre*_*ide 1 ruby-on-rails

我有一个Transaction模型,其中包含:start_balance和end_balance,两者都是十进制字段.开始余额大于期末余额的交易是收费的结果,付款则相反.

我有这个查询只查看end_balance大于start_balance(付款)的交易

class Transaction < ActiveRecord::Base

  def self.payments
    where(:end_balance > :start_balance)
  end

end
Run Code Online (Sandbox Code Playgroud)

这两个字段通常都包含负值.这看起来很简单,但有趣的是,当我运行此查询时,它会将所有记录视为正面.例如,以下代码:

Transaction.payments.first(10).each do |t|
  puts t.start_balance.to_s + " start"
  puts t.end_balance.to_s + " end" 
end
Run Code Online (Sandbox Code Playgroud)

生产:

0.0 start
-6212.0 end
-6212.0 start
0.0 end
0.0 start
-6212.0 end
-6212.0 start
0.0 end
0.0 start
-6212.0 end
-6212.0 start
0.0 end
0.0 start
-6212.0 end
-6212.0 start
0.0 end
0.0 start
-6212.0 end
-6212.0 start
0.0 end
Run Code Online (Sandbox Code Playgroud)

看着这一点,似乎它将所有数字视为积极的.我在这里错过了什么吗?

Aar*_*sen 5

你做不到:

where(:end_balance > :start_balance)
Run Code Online (Sandbox Code Playgroud)

相反,你必须做以下事情:

where("end_balance > start_balance")
Run Code Online (Sandbox Code Playgroud)

Ruby立即评估第一个:

2.1.2 :001 > :end_balance > :start_balance
=> false
Run Code Online (Sandbox Code Playgroud)

而第二个作为条件传递给您的数据库.