Ruby on rails Rails中未定义的局部变量或方法?
这个函数Ruby on rails Rails中未定义的局部变量或方法?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,这个函数 class Invoice < ActiveRecord::Base def self.open_subtotal sum{ |i| i.open_amount / (1.00 + i.tax_rate / 100.00) } end end …给了我Rails 4.0.2中的一个错误: 弃用警告:使用块调用sum已弃用,将在Rails 4.1中删除。如果要对元素数组执行求和计算,请使用to_a.sum&block 当我在求和之前加上一个时,我得到一个未定义
class Invoice < ActiveRecord::Base
def self.open_subtotal
sum{ |i| i.open_amount / (1.00 + i.tax_rate / 100.00) }
end
end
…给了我Rails 4.0.2中的一个错误:
弃用警告:使用块调用sum已弃用,将在Rails 4.1中删除。如果要对元素数组执行求和计算,请使用to_a.sum&block
当我在求和之前加上一个时,我得到一个未定义的局部变量或方法来表示错误
写这封信的正确方法是什么?这样可以:
def self.open_subtotal
all.to_a.sum { |i| i.open_amount / (1.00 + i.tax_rate / 100.00) }
end
但是,假设发票表中的字段为未结金额和税率,则可以在SQL中求和:
这将有助于:
def self.open_subtotal
all.to_a.sum { |i| i.open_amount / (1.00 + i.tax_rate / 100.00) }
end
但是,假设发票表中的字段为未结金额和税率,则可以在SQL中求和:
显然,这是现在的做法
select('sum(invoices.open_amount / (1.00 + invoices.tax_rate / 100.00) as open_subtotal')[0][:open_subtotal]
这将在数据库级别执行计算,并作为新属性open_subtotal追加,然后从select的第一个实例检索该属性
摘自本博客 显然,这是当今的做法
select('sum(invoices.open_amount / (1.00 + invoices.tax_rate / 100.00) as open_subtotal')[0][:open_subtotal]
这将在数据库级别执行计算,并作为新属性open_subtotal追加,然后从select的第一个实例检索该属性
摘自本博客 你在总结什么?你为什么把钱放在花车里@MichalSzyndel:事实上,我所有的钱值都以小数保存在数据库中。我上面的代码会弄糟吗?每次你在Ruby中写0.4它都是一个浮点数,所以是的,它会弄糟。如果您必须将某个值乘以税值,请使用BigDecimal.new来实例化税率。@MichalSzyndel:啊,可以。谢谢你提醒我。你在总结什么?为什么把钱放在花车里@MichalSzyndel:事实上,我所有的钱值都以小数保存在数据库中。我上面的代码会弄糟吗?每次你在Ruby中写0.4它都是一个浮点数,所以是的,它会弄糟。如果您必须将某个值乘以税值,请使用BigDecimal.new来实例化税率。@MichalSzyndel:啊,可以。谢谢你提醒我。