簡體   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