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