Rails:未定义的方法`*'为零:NilClass
我是新手入门,想在模型中做基本的数学运算来获得某些数学的价格。我在产品模型中写了一个简单的等式。这是它:Rails:未定义的方法`*'为零:NilClass
def selling_price
foodio_price + (foodio_price*@@tax) + @@dc
end
但它给错误未定义的方法`*'为零:NilClass。它不能识别乘法以及求和。有人可以告诉这里有什么问题吗?
误差跟它的foodio_price是从NilClass类
对象在伪代码中,foodio_price =零
你的可变foodio_price不instancied(不具有还没有任何值)
你应该试试这个
def selling_price(foodio_price)
foodio_price + (foodio_price*@@tax) + @@dc
end
而在你的代码,其中调用该函数selling_price
的其他地方,你通过我t参数foodio_price
它说错了参数(0表示1) – user1977201 2013-03-11 06:11:50
该函数中的一个变量(如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
在类文件的地方。
有关一个
nil
参数的默认值
foodio_price
def selling_price foodio_price
if foodio_price.nil? return 0.0
foodio_price + (foodio_price*@@tax) + @@dc
end
是的,你说得对。 Foodioprice是零。我已经定义了税和直流。但是由于Foodio_price来自用户的输入,它将是零。那该怎么做呢? – user1977201 2013-03-11 06:10:03
如果'foodio_price'为零,请执行类似我的修改建议的操作。 – varatis 2013-03-11 13:40:47
它的工作。改变了我的模型:
def selling_price
self.foodio_price ||= 0.0
foodio_price + (foodio_price*@@tax) + @@dc
end
foodio_price + ((foodio_price || 1)*(@@tax || 1|) + (@@dc || 0)
试试这个
哪里'foodio_price'从何而来?这是一种方法或ActiveRecord属性或其他? – 2013-03-11 05:45:48
@ muistooshort foodio_price来自产品形式。 – user1977201 2013-03-11 06:13:59