2

私はレールの初心者であり、いくつかの数学から販売価格を取得するためにモデルで基本的な数学を行いたいと思っています。製品モデルで簡単な方程式を書いています。はい、これ:

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

しかし、それはnil:NilClassに対してエラー未定義のメソッド`*'を与えています。乗算の場合は*、合計の場合は+を認識しません。誰かがここで何が悪いのかわかりますか?

4

4 に答える 4

3

その関数の変数の 1 つ (foodio_priceまたは など@@tax) はnilです。を含め、Ruby ではすべてがオブジェクトnilです。他のプログラミング言語ではnull. のすべてのインスタンスはnilclass から継承しますNilClass。したがって、はタイプnil:NilClassのインスタンスを参照しています。nilNilClass

この問題をデバッグするには、ステートメント nilを追加して、これらの値のどれ (または 3 つすべて) を確認できます。puts


私の推測では、 と の@@tax両方@@dcnil. Rails でこれらのクラス変数を使用する必要はほとんどありません。taxanddcを定数として宣言することをお勧めします。

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
于 2013-03-11T05:54:25.377 に答える
0

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

于 2013-03-11T05:38:28.270 に答える
0
foodio_price + ((foodio_price || 1)*(@@tax || 1|) + (@@dc || 0)

これを試して

于 2013-03-11T06:39:41.477 に答える
0

出来た。モデルを次のように変更しました。

 def selling_price
  self.foodio_price  ||= 0.0  
  foodio_price + (foodio_price*@@tax) + @@dc
 end
于 2013-03-11T06:33:53.963 に答える