Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 条带自定义付款表单:ActiveRecord::RecordNotFound_Ruby On Rails 4_Stripe Payments - Fatal编程技术网

Ruby on rails 4 条带自定义付款表单:ActiveRecord::RecordNotFound

Ruby on rails 4 条带自定义付款表单:ActiveRecord::RecordNotFound,ruby-on-rails-4,stripe-payments,Ruby On Rails 4,Stripe Payments,我正在实现Stripe文档中描述的Stripe的自定义支付表单,在设置实例变量@userafter form submission时遇到问题 控制器 服务器日志 当支付页面第一次加载时,实例变量@user=user.findsession[:user_id]设置正确。但是,当提交付款表单并且第二次执行def payment代码时,实例变量设置不正确 错误消息:ActiveRecord::RecordNotFound,无法找到id为的用户= 不知何故,rails无法从会话中检索[:user_id]

我正在实现Stripe文档中描述的Stripe的自定义支付表单,在设置实例变量@userafter form submission时遇到问题

控制器

服务器日志

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

错误消息:ActiveRecord::RecordNotFound,无法找到id为的用户=


不知何故,rails无法从会话中检索[:user_id]值,即使该值已设置,并且我可以使用在付款页面上显示它。请让我知道为什么会这样,我需要改变什么。谢谢

此问题似乎与Stripe无关,但与User.findsession[:User\u id]无关,其中会话[:User\u id]为空

如何处理用户身份验证和会话?你可以用宝石来看看


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

您可以从开发日志中发布错误吗。出于兴趣,您是否将付款方式同时用作GET和POST?嗨,Robin,我用路由和服务器日志数据更新了原始POST。数据显示已成功接收条带令牌,但未设置@user变量。我需要将令牌与现有用户关联,并将该令牌发送回Stripe以在Stripe中创建客户。
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'