【问题标题】:Cannot get stripe.js working with my Rails 4 app无法让 stripe.js 与我的 Rails 4 应用程序一起使用
【发布时间】:2013-12-03 13:53:28
【问题描述】:

好的,这是我关于 SO 的第一个问题,所以请耐心等待(并随时评论我糟糕的问题格式等)

我正在使用 Rails 4 和 Stripe 为客户构建一个 SaaS 站点。我正在关注这个railscast(请记住它是为 Rails 3 编写的——以及Stripe docs

我刚刚按照 railscast 说明编辑了我的 subscriptions.js.coffee 文件。此时,当我在订阅/新表单上单击 subscribe 时,我应该会收到一个带有响应 ID 的 js 警报,但是,我只是被重定向到 http://localhost:3000/subscriptions/X

我提供了我认为相关的文件,但是,我是 Rails 的新手,所以如果需要其他信息来回答问题,请告诉我!谢谢!

我还应该补充一点,我已经禁用了 turbolinks,因为有些人指出这会导致问题。

# subscriptions.js.coffee #

jQuery ->  
  Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'))  
  subscription.setupForm()  

subscription =  
  setupForm: ->  
    $('#new_subscription').submit ->  
      $('input[type=submit]').attr('disabled', true)  
      subscription.processCard()  

  processCard: ->  
    card =  
      number: $('#card_number').val()  
      cvc: $('#card_code').val()  
      expMonth: $('#card_month').val()  
      expYear: $('#card_year').val()  
    Stripe.createToken(card, subscription.handleStripeResponse)  

  handleStripeResponse: (status, response) ->  
    if status == 200  
      alert(response.id)  
    else  
     alert(response.error.message)

# subscriptions/new.html.erb #

<h1>Signing up for "<%= @subscription.plan.name %>"</h1>
<p>Includes <strong><%= @subscription.plan.business_plans %> Business Plans</strong> for only <strong><%= number_to_currency @subscription.plan.price %></strong> per month!</p>

<%= form_for @subscription do |f| %>
  <% if @subscription.errors.any? %>
    <div class="error_messages">
      <h2><%= pluralize(@subscription.errors.count, "error") %> prohibited this subscription from being saved:</h2>
      <ul>
      <% @subscription.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <%= f.hidden_field :plan_id %>

  <div class="field">
    <%= f.label :email %>
    <%= f.text_field :email %>
  </div>
  <div class="field">
    <%= label_tag :card_number, "Credit Card Number" %>
    <%= text_field_tag :card_number, nil, name: nil %>
  </div>
  <div class="field">
    <%= label_tag :card_code, "Security Code on Card (CVV)" %>
    <%= text_field_tag :card_code, nil, name: nil %>
  </div>
  <div class="field">
    <%= label_tag :card_month, "Card Expiration" %>
    <%= select_month nil, {add_month_numbers: true}, {name: nil, id: "card_month"} %>
    <%= select_year nil, {start_year: Date.today.year, end_year: Date.today.year+15}, {name: nil, id: "card_year"} %>
  </div>
  <div class="actions">
    <%= f.submit "Subscribe" %>
  </div>
<% end %>

# subscriptions_controller.rb #

class SubscriptionsController < ApplicationController
  def new
    plan = Plan.find(params[:plan_id])
    @subscription = plan.subscriptions.build
  end

  def create
    @subscription = Subscription.new(subscription_params)
    if @subscription.save
      redirect_to @subscription, :notice => "Thank you for subscribing!"
    else
      render :new
    end
  end

  def show
    @subscription = Subscription.find(params[:id])
  end

  private

  def subscription_params
    params.require(:subscription).permit(:plan_id, :email)
  end
end

【问题讨论】:

    标签: ruby-on-rails coffeescript ruby-on-rails-4 stripe-payments


    【解决方案1】:

    您的提交处理程序:

    $('#new_subscription').submit ->  
      $('input[type=submit]').attr('disabled', true)  
      subscription.processCard()
    

    应返回false 或致电ev.preventDefault 以防止表单被提交:

    $('#new_subscription').submit (ev) ->
      ev.preventDefault() # <------------------------ This
      $('input[type=submit]').attr('disabled', true)  
      subscription.processCard()
      false               # <------------------------ or this.
    

    否则,您将调用 processCard,它将向 Stripe 发送 AJAX 调用,但表单将已提交到服务器并在 Stripe 响应之前刷新页面。

    一旦你解决了这个问题,你可能会进入一个提交循环,就像我几个小时前回答的 this other Stripe question

    【讨论】:

    • 非常感谢您的快速回复!正是这样的事情让我对人性充满信心。
    • @mu 太短你能帮帮我吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 2016-02-06
    • 1970-01-01
    • 2020-03-27
    相关资源
    最近更新 更多