繁体   English   中英

Rails:nil:NilClass 的未定义方法“*”

[英]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 中使用这些类变量。 我建议只将taxdc声明为常量,所以像

TAX = 0.09 DC = 0.10

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


对于foodio_pricenil参数的默认值

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.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM