3

レールが初めてで、ベストプラクティスのエラー処理に関するいくつかの問題が発生しています。

クーポンを価格設定に適用するために使用される/libフォルダーのヘルパーに次のコードがあります。

以下のコードからわかるように、エラーを返すためにいくつかの異なる方法を試しています。具体的には、model.errors.addとflash [:error]です。

以下のコードは、有効なクーポンが適用されると、新しい価格を返すことになっています。エラーが発生した場合に何を返すかがわかりません。このメソッドは実際にはブール値ではなく数値を返す必要があるため、以下のようにfalseを返すことはできません。lib / helperからのビューにエラーをバブルして実行を停止するための最良の方法は何ですか?

def calc_coupon transaction_price, discount_code, current_tenant
   coupon = Coupon.where(code: discount_code, tenant_id: current_tenant.id).first

   if coupon.nil?
     current_tenant.errors.add :base, "No such coupon exists"
     return false
   else
     if coupon.maxed? || coupon.expired?
       flash[:error] = "This coupon is no longer valid."
       return false
     else
      transaction_price = coupon.calculate(transaction_price)
     end
   end
   return transaction_price
end
4

1 に答える 1