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:啊,可以。谢谢你提醒我。