2

我是 Rails 的新手,想在模型中做基本的数学运算,以从一些数学运算中获得售价。我正在产品模型中写一个简单的方程。就这个:

 def selling_price
  foodio_price + (foodio_price*@@tax) + @@dc
 end

但它为 nil:NilClass 提供了错误未定义的方法“*”。它不识别 * 用于乘法以及 + 用于求和。谁能告诉这里有什么问题?

4

4 回答 4

3

该函数中的一个变量(如foodio_priceor @@tax)是nil. nilRuby中的一切都是一个对象,甚至包括null. 的每个实例都nil继承自类NilClass。因此,nil:NilClass指的nil是类型为 的实例NilClass

nil要调试此问题,您可以通过添加puts语句 来检查这些值中的哪一个(或三个) 。


我的猜测是@@tax@@dc都是nil。您很少需要在 Rails 中使用这些类变量。我建议只将taxand声明dc为常量,所以像

TAX = 0.09
DC = 0.10

在你的类文件的某个地方。


对于nil参数的默认值foodio_price

def selling_price foodio_price
  if foodio_price.nil? return 0.0
  foodio_price + (foodio_price*@@tax) + @@dc
end
于 2013-03-11T05:54:25.377 回答
0

错误是说 foodio_price 是来自 NilClass 类的对象

在伪代码中,foodio_price = nil

您的变量 foodio_price 没有被实例化(还没有任何价值)

你应该试试这个

def selling_price(foodio_price)
  foodio_price + (foodio_price*@@tax) + @@dc
end

在你的代码的其他地方,你调用函数的地方selling_price,你将参数传递给它foodio_price

于 2013-03-11T05:38:28.270 回答
0

有效。将我的模型更改为:

 def selling_price
  self.foodio_price  ||= 0.0  
  foodio_price + (foodio_price*@@tax) + @@dc
 end
于 2013-03-11T06:33:53.963 回答
0
foodio_price + ((foodio_price || 1)*(@@tax || 1|) + (@@dc || 0)

尝试这个

于 2013-03-11T06:39:41.477 回答