首页 > 解决方案 > 带状充电的未定义变量“游戏”

问题描述

我正在使用一个完美的条纹卡,但是我正在将条纹连接用于一个市场,它根据他们的商家 ID 向不同的用户发送付款。我收到“游戏”错误。

我也尝试定义变量 game = Game.find(params[:game_id]) 但我收到错误“找不到没有 ID 的游戏”

这是我的条纹方法:

class LineItemsController < ApplicationController
    def charge
        price = params[:amount].to_f*100
        Stripe::Charge.create({
            amount: price.to_i,
            currency: 'usd',
            source: params[:stripeToken], # obtained with Stripe.js
            description: 'plan',
            :destination => {
                :amount => price * 94, 
                :account => game.user.merchant_id
              }
          })

        rescue Stripe::CardError => e
          flash[:error] = e.message
          redirect_to new_charge_path
      end
    end

line_items属于cartand 我有一个 has_many 并且属于 and 之间的game关联line_items

class LineItem < ApplicationRecord
  belongs_to :game
  belongs_to :cart

  def total_price
    game.price.to_i * quantity.to_i
  end
end

这是我的游戏模型:

class Game < ApplicationRecord
  belongs_to :user
  has_many :line_items
end

这是我的购物车/show.html.erb 文件

<p id="notice"><%= notice %></p>

<%= link_to 'Keep Shopping', games_path %>

<div>
    <%= render(@cart.line_items) %>
</div>
<div>
    <%= link_to 'Empty Cart', @cart, method: :delete, data: { confirm: "Are you sure?" } %>
</div>

<div>
    Total: <%= number_to_currency(@cart.total_price) %> 
</div>



<script src="https://js.stripe.com/v3/"></script>
<form action="/charge" method="post" id="payment-form">
  <div id="content" class="section-padding">
    <div class="container">
      <div class="row">
          <div class="col-md-12 col-xs-12">
            <%= hidden_field_tag :cart_id , nil, value: @cart.id %>
            <%= hidden_field_tag :amount , nil, id: "amount", value: @line_item.total_price %>
            <input 
                type="submit" 
                value="Pay with Card"
                data-key="<%= ENV['STRIPE_PUBLISHABLE_KEY'] %>"
                data-currency="usd"
                class="btn btn-primary"
            />
          </div>
        </div>
      </div>
  </div>
</form>

<script src="https://checkout.stripe.com/v2/checkout.js"></script>
<script>
$(document).ready(function() {
    $(':submit').on('click', function(event) {
        event.preventDefault();
        var $button = $(this),
            $form = $button.parents('form');
        var opts = $.extend({}, $button.data(), {
            token: function(result) {
                $form.append($('<input>').attr({ type: 'hidden', name: 'stripeToken', value: result.id })).submit();
            }
        });
        StripeCheckout.open(opts);
    });
});
</script>

所以发生了什么是游戏 has_many 行项目。订单项属于游戏和购物车。购物车只有很多订单项

标签: ruby-on-railsruby

解决方案


您需要game在使用它之前声明变量LineItemsController#charge

game = Game.find(params[:game_id])以前一样Stripe::Charge.create...


推荐阅读