2013-03-11 134 views
0

我是新手入门,想在模型中做基本的数学运算来获得某些数学的价格。我在产品模型中写了一个简单的等式。这是它:Rails:未定义的方法`*'为零:NilClass

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

但它给错误未定义的方法`*'为零:NilClass。它不能识别乘法以及求和。有人可以告诉这里有什么问题吗?

+2

哪里'foodio_price'从何而来?这是一种方法或ActiveRecord属性或其他? – 2013-03-11 05:45:48

+0

@ muistooshort foodio_price来自产品形式。 – user1977201 2013-03-11 06:13:59

回答

0

误差跟它的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

它说错了参数(0表示1) – user1977201 2013-03-11 06:11:50

2

该函数中的一个变量(如foodio_price@@tax)为nil。 Ruby中的所有东西都是一个对象,甚至包括nil,在其他编程语言中您可能会知道它为nullnil的每个实例都继承NilClass类。因此,nil:NilClass指的是nil的实例,其类型为NilClass

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


我的猜测是 @@tax@@dc都是 nil。你很少需要在Rails中使用这些类变量。我建议刚刚宣布 taxdc为常数,所以像

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 
+0

是的,你说得对。 Foodioprice是零。我已经定义了税和直流。但是由于Foodio_price来自用户的输入,它将是零。那该怎么做呢? – user1977201 2013-03-11 06:10:03

+0

如果'foodio_price'为零,请执行类似我的修改建议的操作。 – varatis 2013-03-11 13:40:47

0

它的工作。改变了我的模型:

def selling_price 
    self.foodio_price ||= 0.0 
    foodio_price + (foodio_price*@@tax) + @@dc 
end 
0
foodio_price + ((foodio_price || 1)*(@@tax || 1|) + (@@dc || 0) 

试试这个

相关问题