2017-11-27 7 views
1

私は、ハードコーディングされた量すなわちで成功したチェックを作ることができた:のは、私はCURRENT_USERが格納されている具体的な「価格」のための私のポートフォリオへのアクセスを購入することができるようにしたいとしましょうBraintree :: Transaction.saleをハードコードされた値なしで正常にチェックアウトするにはどうすればいいですか?

def checkout 
    nonce = params["payment_method_nonce"] 

    if current_user.braintree_id? 
     customer = Braintree::Customer.find(current_user.braintree_id) 
    else 
     @result = Braintree::Customer.create(
      email: current_user.email, 
      payment_method_nonce: params[:payment_method_nonce] 
     ) 
      customer = result.customer 
      current_user.update(braintree_id: customer.id) 
end 

    @result = Braintree::Transaction.sale(
     amount: **"10.00"**, 
     payment_method_nonce: nonce 
    ) 

    if @result.success? 
     redirect_to root_path, notice: "You have successfully checked out" 
    else 
     flash[:alert] = "Something went wrong while processing your transaction" 
     render :new 
    end 
end 

私のレールデータベースの中に。金額をデータベースからオブジェクトの属性から引き出すことによって金額を設定する方法はありますか:「< [email protected]_item.price>」?私は複数の試行を試みましたが、運がありませんでした。私は何が間違っていますか? Railsフレームワークのドキュメントに記載されているように

答えて

1

ActiveRecord Basics

あなたは、テーブルからPortfolioItemsモデルを新しいフィールドをマップする必要があります。これを行うには、最初にマイグレーションを作成してそのフィールドをテーブルに追加する必要があります。小数点を使用することをお勧めします。浮動小数点数は、カンマの後にアンマウントを制限する場合に問題を引き起こす可能性があるからです。この項目は、それに関連付けられた価格を持ってできるようになります

t.decimal :price, scale: 2, precision: 5 

及び方法になります:

各portfolio_item

は、それが2の規模で、小数点として格納価格だ持つべき利用可能 @portfolio_item.priceを。

その後、あなたは自分のコントローラに交換する必要がありますと

@result = Braintree::Transaction.sale(
     amount: **"10.00"**, 
     payment_method_nonce: nonce 
    ) 

@result = Braintree::Transaction.sale(
     amount: @portfolio_item.price, 
     payment_method_nonce: nonce 
    ) 
+1

「各portfolio_itemは、それが2の規模を持つ小数として格納価格だ持っている必要があり、これはアイテムを許可しますそれに付随する価格を持ち、メソッドを作る:@​​portfolio_item.price available。 " - なぜこれが文書化されているのですか?これを誰かが知るようになりましたか?その特定の列型を価格メソッドとして利用できるようにするのは単なるレールのことですか? – chrickso

+0

答えが更新されました。ソースの不足について申し訳ありません。 – tebayoso

関連する問題