条纹自定义付款表格:ActiveRecord :: RecordNotFound

时间:2016-03-30 17:10:10

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

我正在实施Stripe的自定义付款表单,如条带文档(Stripe DocumentationStripe Git Repository)中所述,我在提交表单后设置实例变量@user时遇到问题。

控制器

def payment
  @user = User.find(session[:user_id])
  if params[:stripeToken] != nil
    @token = params[:stripeToken]
    if @user.update(:stripe_pmt_token => @token)
      create_stripe_customer
      redirect_to confirm_path
    else
      render 'payment'
    end  
  end  
end

def create_stripe_customer
  Stripe.api_key = "<TOKEN>"   
  #Create a Customer
  @customer = Stripe::Customer.create(
    :source => @user[:stripe_pmt_token],
    :description => "#{@user.first_name}"
  )
  @user.update(:stripe_customer_id => @customer.id)
end 

路线

 get 'payment' => 'checkout#payment'
 post 'payment' => 'checkout#payment'

服务器日志

Started POST "/payment" for 69.23.75.159 at 2016-03-31 11:49:01 +0000
Processing by CheckoutController#payment as HTML
Parameters: {"stripeToken"=>"tok_17v<TOKEN>"}
Can't verify CSRF token authenticity
User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id"       = ? LIMIT 1  [["id", nil]]
Completed 404 Not Found in 2ms (ActiveRecord: 0.2ms)

ActiveRecord::RecordNotFound (Couldn't find User with 'id'=):
app/controllers/checkout_controller.rb:5:in `payment'

第一次加载付款页面时,实例变量@user = User.find(session[:user_id])设置正确。但是,当提交付款表单并且def payment的代码第二次执行时,实例变量未正确设置。

错误讯息:ActiveRecord::RecordNotFoundCouldn't find User with 'id'=

以某种方式,rails无法从会话中检索[:user_id]值,即使已设置并且我能够使用<%= session[:user_id] %>在付款页面上显示该值。请让我知道为什么会这样,我需要改变什么。谢谢!

1 个答案:

答案 0 :(得分:0)

此问题似乎与Stripe无关,但User.find(session[:user_id])session[:user_id]为空。

您如何处理用户身份验证和会话?您可以使用Devise gem查看。

此外,使用User.find意味着您需要在应用程序中的某处(最好是通用)处理异常ActiveRecord::RecordNotFound。否则,使用User.find_by并检查结果是否返回nil是另一种选择。