我有一个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)
看着这一点,似乎它将所有数字视为积极的.我在这里错过了什么吗?
你做不到:
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)
而第二个作为条件传递给您的数据库.
| 归档时间: |
|
| 查看次数: |
455 次 |
| 最近记录: |