私はレールの初心者であり、いくつかの数学から販売価格を取得するためにモデルで基本的な数学を行いたいと思っています。製品モデルで簡単な方程式を書いています。はい、これ:
def selling_price
foodio_price + (foodio_price*@@tax) + @@dc
end
しかし、それはnil:NilClassに対してエラー未定義のメソッド`*'を与えています。乗算の場合は*、合計の場合は+を認識しません。誰かがここで何が悪いのかわかりますか?
私はレールの初心者であり、いくつかの数学から販売価格を取得するためにモデルで基本的な数学を行いたいと思っています。製品モデルで簡単な方程式を書いています。はい、これ:
def selling_price
foodio_price + (foodio_price*@@tax) + @@dc
end
しかし、それはnil:NilClassに対してエラー未定義のメソッド`*'を与えています。乗算の場合は*、合計の場合は+を認識しません。誰かがここで何が悪いのかわかりますか?
その関数の変数の 1 つ (foodio_price
または など@@tax
) はnil
です。を含め、Ruby ではすべてがオブジェクトnil
です。他のプログラミング言語ではnull
. のすべてのインスタンスはnil
class から継承しますNilClass
。したがって、はタイプnil:NilClass
のインスタンスを参照しています。nil
NilClass
この問題をデバッグするには、ステートメント
nil
を追加して、これらの値のどれ (または 3 つすべて) を確認できます。puts
@@tax
両方@@dc
がnil
. Rails でこれらのクラス変数を使用する必要はほとんどありません。tax
anddc
を定数として宣言することをお勧めします。
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
The error is saying the foodio_price is an object from NilClass class
In pseudo code, foodio_price = nil
Your variable foodio_price is not instancied (don't have any value yet)
You should try this
def selling_price(foodio_price)
foodio_price + (foodio_price*@@tax) + @@dc
end
And in other places of your code, where you call the function selling_price
, you pass it the parameter foodio_price
foodio_price + ((foodio_price || 1)*(@@tax || 1|) + (@@dc || 0)
これを試して
出来た。モデルを次のように変更しました。
def selling_price
self.foodio_price ||= 0.0
foodio_price + (foodio_price*@@tax) + @@dc
end