带Stripe的订阅表单未正确传递参数 [英] Subscription form with Stripe not passing parameters properly
问题描述
我在Rails 4.2应用程序中遇到以下错误.我正在尝试使用Stripe设置订阅.订阅属于一家公司,拥有has_one计划.
I am getting the following error on my Rails 4.2 application. I'm trying to setup subscriptions with Stripe. A subscription belongs to a business and has_one plan.
在我看来,我在URL中传递了参数: http://localhost:3000/subscriptions/new?plan_id = 2& business_id = 1001
On my view I pass the params in the URL: http://localhost:3000/subscriptions/new?plan_id=2&business_id=1001
提交表单后,出现以下错误,代码如下.如果这是一个初学者的问题,请原谅我.
After I submit the form I get the error below and my code follows. Forgive me if this is a beginner question.
订阅控制器
class SubscriptionsController < ApplicationController
before_action :set_subscription, only: [:show, :edit, :update, :destroy]
# GET /subscriptions
def index
@subscriptions = Subscription.all
end
# GET /subscriptions/1
def show
end
# GET /subscriptions/new
def new
@subscription = Subscription.new
@plan = Plan.find_by id: params["plan_id"]
@business = Business.find_by id: params["business_id"]
end
# POST /subscriptions
def create
@subscription = Subscription.new subscription_params.merge(email: stripe_params["stripeEmail"],
card_token: stripe_params["stripeToken"])
raise "Please, check subscription errors" unless @subscription.valid?
@subscription.process_payment
@subscription.save
redirect_to @subscription, notice: 'Subscription was successfully created.'
rescue => e
flash[:error] = e.message
render :new
end
private
def stripe_params
params.permit :stripeEmail, :stripeToken
end
# Use callbacks to share common setup or constraints between actions.
def set_subscription
@subscription = Subscription.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def subscription_params
params.require(:subscription).permit(:plan_id, :business_id)
end
end
订阅模型
class Subscription < ActiveRecord::Base
belongs_to :business
has_one :plan
def process_payment
customer = Stripe::Customer.create email: email,
card: card_token
Stripe::Charge.create customer: customer.id,
amount: plan.price * 100,
description: plan.name,
currency: 'usd'
end
end
订阅视图(new.html.erb)
<%= form_for @subscription do |f| %>
<% if @subscription.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@subscription.errors.count, "error") %>
prohibited this subscription from being saved:
</h2>
<ul>
<% @subscription.errors.full_messages.each do |message| %>
<li>
<%= message %>
</li>
<% end %>
</ul>
</div>
<% end %>
<h1><%= @business.name %></h1>
<div class="field">
<%= f.hidden_field :plan_id, value: @plan.id %>
</div>
<div class="field">
<%= f.hidden_field :business_id, value: @business.id %>
</div>
<div class="actions">
<script
src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<%= Rails.application.secrets.stripe_publishable_key %>"
data-image="/img/documentation/checkout/marketplace.png"
data-name="Business Name"
data-description="<%= @plan.name %>"
data-amount="<%= @plan.price*100 %>">
</script>
</div>
<% end %>
计划模型
class Plan < ActiveRecord::Base
belongs_to :subscription
end
推荐答案
我发现问题出在我的计划和订阅之间.我本应该有相反的计划,但我有《计划属于订阅》.
I figured out the issue was with my association between Plans and Subscriptions. I had Plans belongs_to Subscription when I should have had it the other way around.
class Subscription < ActiveRecord::Base
belongs_to :business
belongs_to :plan
...
这篇关于带Stripe的订阅表单未正确传递参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!