我使用Roo将Excel中的一些值导入到我的Rails应用程序中的布尔字段中。
在Rails控制台中,它看起来一切正常,但在我的Rails应用程序中,布尔值似乎不会被Rails读取。
我有一个DataPoint模型。 DataPoint的一个属性是current_employed的布尔字段。
在Rails控制台中它的工作原理如此(似乎很好):
003:0 > x.currently_employed
=> true
004:0 > z.currently_employed
=> false
005:0 > x.currently_employed == false
=> false
006:0 > x.currently_employed == "true"
=> false
007:0 > x.currently_employed == true
=> true
008:0 > z.currently_employed == false
=> true
009:0 > z.currently_employed == "false"
=> false
010:0 > z.currently_employed == true
=> false
鉴于Console中的一切似乎都很好看,我认为我的data_point.rb模型中的这个公式可以正常工作:
def self.pct_true(data_points)
true_count = 0
data_points.each do |x|
if x.currently_employed
true_count += 1
else
end
end
return true_count / data_points.count * 100
end
但它返回零值,即使我有多个DataPoint实例,其中x.currently_employed在Rails控制台中的计算结果为true。
有趣的是,当我更改布尔字段" current_employed"到整数字段" annual_income",这个相同的函数计算每个实例并返回值100.
鉴于上面的Rails控制台结果,任何想法我的模型中的方法可能有什么问题?
谢谢!
答案 0 :(得分:3)
你的问题只是整数除法 - 看看:
[1] pry(main)> 1 / 100
=> 0
[2] pry(main)> 20 / 100
=> 0
快速解决方法可能是:
return true_count / data_points.count.to_f * 100
答案 1 :(得分:1)
您将整数除以整数,因此无法获得小数值。因为您将true_count除以TOTAL计数,所以除非每个data_point.currently_employed都为真,否则该除法将始终为0。因此,您唯一可能的结果是0 * 100(0)或1 * 100(100),而100则非常罕见。
你可以这样解决:
return true_count.to_f / data_points.count.to_f * 100
这会将整数转换成浮点数(基本上是小数),并允许除法。
无关注意
您的代码:
if x.currently_employed
true_count += 1
else
end
可以重构为:
true_count += 1 if x.currently_employed
答案 2 :(得分:0)
如上所述,这是一个整数除法相关的问题
true_count = data_points.select {|data_point| data_point.currently_employed }.size