Rails:条带按钮在第一次尝试时不工作(直到重新加载页面)

时间:2015-08-12 04:04:50

标签: ruby-on-rails stripe-payments

我有一个带有自定义结帐的rails应用,用户点击按钮即可启动Stripe模式。

问题是当我第一次访问该页面并单击该按钮时,我收到此错误:

“无效的源对象:必须是字典或非空字符串”

错误来自我的控制器创建操作:

customer = Stripe::Customer.create(
          email: params[:stripeEmail],
          card: params[:stripeToken]
        )

但是如果我刷新页面,我可以毫无问题地启动模式。我认为这可能是一个turbolinks问题,所以我在一个准备好的var中添加了我的脚本:

<script>

       var ready;
      ready = function() {

       $('#stripe-button').on('click', function (e) {
       // Open Checkout with further options
       $name = $('input[name=f_name]').val() + " " + $('input[name=l_name]').val();
       handler.open({
         name: $name,
         description: "<%= @workshop.name %>" + " workshop",
         amount: <%= @workshop.price * 100 %>
       });
     e.preventDefault();
     });

     $(window).on('popstate', function() {
       handler.close();
     });


      var handler = StripeCheckout.configure({
       key: "<%= ENV['stripe_publishable_key'] %>",
       token: function (token, args) {
         $("#stripeToken").val(token.id);
         $("#stripeEmail").val(token.email);
         $("#stripeAmount").val('<%= j (@workshop.price * 100).to_s %>');
         $("#stripeForm").submit();
       }
     });

    };

    $(document).ready(ready);
    $(document).on('page:load', ready);


   </script>

但不是固定的。当首次加载页面时,似乎e.preventDefault()不起作用......但我不确定原因。

1 个答案:

答案 0 :(得分:1)

我在使用Stripe实现自定义表单时遇到了类似的问题。对我有用的是从应用程序布局中移出:

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= javascript_include_tag "https://js.stripe.com/v2/" %>
<%= javascript_tag "Stripe.publishableKey = '#{STRIPE_PUBLISHABLE_KEY}';" %>

到页面底部的实际视图文件(例如new.html.erb),以便它位于结束</body>标记的上方。这意味着我必须在不通过应用程序布局的每个视图中包含application.js,所以我可能会将它添加到页脚。不确定这是不是最好的方式,但它对我有用。