レールが初めてで、ベストプラクティスのエラー処理に関するいくつかの問題が発生しています。
クーポンを価格設定に適用するために使用される/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