2017-06-02 12 views
0

カタログ内の個々の製品に対して割引を実装しようとしています。 私はProductsテーブル割引に新しいフィールドを追加しました。 discount.presentの場合、product.priceを再計算するにはどうすればよいですか?レールで製品の割引を実装する方法

def price 
old_price = self.price 
if self.discount.present? 
    self.price -= self.price/self.discount 
else 
    old_price 
end 

をしかし、それは私を取得する「スタックレベルが深すぎる」​​というエラー

+0

で「スタックレベルが深すぎる」​​という使用はほとんどの場合、あなたは無限再帰の問題があることを意味します。停止条件なしで自身を呼び出す関数。 –

答えて

4

からpriceは常に自分自身を参照しているため、このエラーが発生します。

は私がproduct.rbするヘルパーを追加しようとしました。あなたは、価格を表示するための新しい方法を作成するほうがずっと良いでしょう。

def price_with_discount 
    return self.price if self.discount.nil? || self.discount.zero? 
    self.price - (self.price/self.discount) 
end 

そして、あなたはあなたのビュー

<%= product.price_with_discount %> 
+0

ありがとう!しかし、新旧の両方の価格を表示する必要がある場合はどうすればよいですか? – alexxero

+1

次に価格を表示するだけです。 '<%= product.price%> ' – Iceman

+1

これは2つを分けるのに良いことですので、あなたが望むものを表示することができます。 – Iceman

関連する問題