2013-03-11 190 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) 

試試這個

相關問題