total_price
のすべての製品のうち、cart
本来あるべきように保存されていません。実際の合計金額に関係なく、常に1が表示されます。この問題は、moneygemとgoogle_currencygemをインストールした後に発生したため、通貨だけでなく、選択したロケールに基づいて製品の価格自体を変更できます。
したがって、合計金額は常に1ですが、同時に、ショッピングプロセス中に画面に表示される金額は正しい数値を示します。つまり、価格AとBの2つの商品を選択してから、カート(画面上)に表示します。 )私は正しいtotal_price = A + Bを持っています。これ以上、クレジットカードのフィールドに入力した後に注文を作成するために押すと、ActiveMerchantはデータをpaypalに送信し、paypalに送金されるUSDの金額はカートA+Bにあるtotal_price。
問題は、アプリが正しいtotal_price
ものを取得してペイパルに送信するのに、同時にこれtotal_price
を注文作成時にデータベースに保存できないため、代わりに1を保存する理由です。
注文を作成するときにコンソールが言うこと:
(0.1ms) BEGIN
SQL (0.4ms) INSERT INTO `orders` (`card_expires_on`, `card_type`, `cart_id`, `created_at`, `first_name`, `ip_address`, `last_name`, `total`, `updated_at`, `user_id`) VALUES ('2012-04-01', 'visa', 5, '2012-04-18 21:35:38', 'Rosca', '127.0.0.1', 'Sergiu', 1, '2012-04-18 21:35:38', 7)
order_transactionの詳細:
SQL (0.5ms) INSERT INTO `order_transactions` (`action`, `amount`, `authorization`, `created_at`, `message`, `order_id`, `params`, `success`, `updated_at`) VALUES ('purchase', 1, '0GT41652PP785722H', '2012-04-18 21:35:46', 'Success', 5, '--- \nbuild: \"2764190\"\nAck: Success\ntimestamp: \"2012-04-18T21:35:45Z\"\nTransactionID: 0GT41652PP785722H\namount: \"42.00\"\namount_currency_id: USD\ntransaction_id: 0GT41652PP785722H\nack: Success\nBuild: \"2764190\"\navs_code: X\nversion: \"62.0\"\nTimestamp: \"2012-04-18T21:35:45Z\"\nCorrelationID: 690aa904db3c\nAmount: \"42.00\"\nAVSCode: X\nVersion: \"62.0\"\ncvv2_code: M\nCVV2Code: M\ncorrelation_id: 690aa904db3c\n', 1, '2012-04-18 21:35:46')
注文の作成方法に関するいくつかの詳細:
orders_controller.rb
def create
@order = current_cart.build_order(params[:order])
@order.user_id = current_user.id
@order.total = current_cart.total_price
# raise current_cart.total_price.inspect
@order.line_items = current_cart.line_items
@order.ip_address = request.remote_ip
if @order.save
if @order.purchase
Cart.destroy(session[:cart_id])
session[:cart_id] = nil
else
render :action => "failure"
end
respond_to do |format|
format.html { redirect_to products_path, :notice =>
'Thank you for your order.' }
format.json { render :json => @order }
end
else
render :action => 'new'
end
end
コントローラでレイズインスペクトラインをアクティブにすると、
#<Money cents:4200 currency:USD>
エラー。この場合、4200は2つの選択された製品のtotal_priceです。42.00米ドル。これは、total_price式が、アプリがデータベースに保存する必要がある時点まで正常に機能することを示すもう1つの証拠です。
合計金額:
total_price
cart.rbおよびline_item.rbで形成されます
line_item.rb
belongs_to :order
belongs_to :product
belongs_to :cart
belongs_to :user
def total_price
product.price * quantity
end
cart.rb
has_many :line_items#, :dependent => :destroy
has_one :order
def to_s
id
end
def add_product(product_id)
current_item = line_items.find_by_product_id(product_id)
if current_item
current_item.quantity += 1
else
current_item = line_items.build(:product_id => product_id)
end
current_item
end
def total_price
line_items.to_a.sum { |item| item.total_price }
end
編集
データベースのorder.total
フィールドタイプはinteger(11)になりましたが、decimal(10,0)を使用して価格をセントで格納しようとしましたが、とにかく機能しませんでした。常に合計価格が1USDになりました。の価格products
はdecimal(10,0)です。
助けてくれて本当にありがとう..これに参加した将来の開発者にとって役立つかもしれません。
あなたが必要とするかもしれない他の情報があれば、私に知らせてください。