[英]Rails: undefined method `*' for nil:NilClass
我是 Rails 的新手,想在模型中进行基本数学运算,以便从一些数学运算中获得售价。 我在产品模型中写了一个简单的方程。 就这个:
def selling_price
foodio_price + (foodio_price*@@tax) + @@dc
end
但是它为 nil:NilClass 给出了错误未定义的方法 `*'。 它不能识别乘法的 * 以及和的 +。 任何人都可以告诉这里有什么问题吗?
该函数中的变量之一(如foodio_price
或@@tax
)是nil
。 Ruby 中的一切都是对象,甚至包括nil
,您在其他编程语言中可能将其称为null
。 nil
每个实例都继承自NilClass
类。 因此, nil:NilClass
指的是nil
一个实例,它的类型是NilClass
。
要调试此问题,您可以通过添加puts
语句来检查这些值中的哪些(或三个) nil
。
@@tax
和@@dc
都是nil
。
您很少需要在 Rails 中使用这些类变量。
我建议只将tax
和dc
声明为常量,所以像
TAX = 0.09 DC = 0.10
在你的类文件中的某个地方。
foodio_price
的nil
参数的默认值
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)
试试这个
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.