我是 Rails 的新手,想在模型中做基本的数学运算,以从一些数学运算中获得售价。我正在产品模型中写一个简单的方程。就这个:
def selling_price
foodio_price + (foodio_price*@@tax) + @@dc
end
但它为 nil:NilClass 提供了错误未定义的方法“*”。它不识别 * 用于乘法以及 + 用于求和。谁能告诉这里有什么问题?
我是 Rails 的新手,想在模型中做基本的数学运算,以从一些数学运算中获得售价。我正在产品模型中写一个简单的方程。就这个:
def selling_price
foodio_price + (foodio_price*@@tax) + @@dc
end
但它为 nil:NilClass 提供了错误未定义的方法“*”。它不识别 * 用于乘法以及 + 用于求和。谁能告诉这里有什么问题?
该函数中的一个变量(如foodio_price
or @@tax
)是nil
. nil
Ruby中的一切都是一个对象,甚至包括null
. 的每个实例都nil
继承自类NilClass
。因此,nil:NilClass
指的nil
是类型为 的实例NilClass
。
nil
要调试此问题,您可以通过添加puts
语句
来检查这些值中的哪一个(或三个) 。
@@tax
和@@dc
都是nil
。您很少需要在 Rails 中使用这些类变量。我建议只将tax
and声明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
错误是说 foodio_price 是来自 NilClass 类的对象
在伪代码中,foodio_price = nil
您的变量 foodio_price 没有被实例化(还没有任何价值)
你应该试试这个
def selling_price(foodio_price)
foodio_price + (foodio_price*@@tax) + @@dc
end
在你的代码的其他地方,你调用函数的地方selling_price
,你将参数传递给它foodio_price
有效。将我的模型更改为:
def selling_price
self.foodio_price ||= 0.0
foodio_price + (foodio_price*@@tax) + @@dc
end
foodio_price + ((foodio_price || 1)*(@@tax || 1|) + (@@dc || 0)
尝试这个