Ruby on rails 使用Coffeescript更新Stripe信用卡
我终于想出了如何使用这个工具实现每月计费 目前,我的#新建#订阅表单和编辑表单的提交按钮都会创建信用卡数据并将其发送到Stripe 但由于某些原因,我在更新信用卡时不断遇到此错误Ruby on rails 使用Coffeescript更新Stripe信用卡,ruby-on-rails,ruby,forms,coffeescript,stripe-payments,Ruby On Rails,Ruby,Forms,Coffeescript,Stripe Payments,我终于想出了如何使用这个工具实现每月计费 目前,我的#新建#订阅表单和编辑表单的提交按钮都会创建信用卡数据并将其发送到Stripe 但由于某些原因,我在更新信用卡时不断遇到此错误 can't convert Symbol into String app/controllers/subscriptions_controller.rb:38:in `update' 问题:此错误是由于咖啡脚本造成的,还是我的模型中的更新卡方法导致了此问题? 编辑表格 <%= form_for @subscri
can't convert Symbol into String
app/controllers/subscriptions_controller.rb:38:in `update'
问题:此错误是由于咖啡脚本造成的,还是我的模型中的更新卡方法导致了此问题?
编辑表格
<%= form_for @subscription, :html => { :id => "update_card" } do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.hidden_field :plan_id %>
<%= f.hidden_field :user_id %>
<%= f.hidden_field :stripe_card_token %>
<h4>Change Credit Card</h4>
<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>
<%= f.submit "Change Credit Card", :class => "btn btn-primary" %>
<% end %>
模型
我认为是打字错误,你写的是“subscription.processCard()”而不是“changecard.processCard()”
您正在使用
params
作为参数调用update\u card
:
@subscription.update_card(params)
而更新卡
需要:在参数
中添加条带卡令牌
:
def update_card(params)
#...
customer.card = params[:stripe_card_token]
但是没有params[:stripe\u card\u token]
,令牌位于params[:subscription][:stripe\u card\u token]
:
Parameters: {
...
"subscription"=>{ ... "stripe_card_token"=>"tok_103PCo26f8kAprmwHCPjZ6T5"},
}
params
结构也与表单的结构匹配:
<%= form_for @subscription, :html => { :id => "update_card" } do |f| %>
...
<%= f.hidden_field :stripe_card_token %>
您还有一个对@subscription.update\u card
的偶然呼叫,没有任何参数。您的整个控制器方法可能更像这样:
def update
@subscription = current_user.subscription
if @subscription.update_card(params[:subscription])
redirect_to edit_subscription_path, :success => 'Updated Card.'
else
flash.alert = 'Unable to update card.'
render :edit
end
end
是的,我已经想到了,我确实修复了它,但我得到了相同的结果/ic,那么我的更新卡方法现在也会有customer.card=params[:subscription]了吗?还是保持不变?
params
内部的update\u卡
将已经是控制器的params
的正确块。我建议def update\u card(attrs)
以避免名称混淆。好的,我已经更新了上面的代码。它最终工作,并将信用卡数据传递给stripe。但在我这边,我犯了这个错误。无法将符号转换为字符串我在你的问题中没有看到SubscriptionController代码中有38行。似乎我们正在做相同的事情,因为你的一些帖子与我的应用程序相关。你能给我发一封电子邮件吗?或者我可以把你的邮件发给我,因为我想私下讨论一下关于stripe的事。谢谢
@subscription.update_card(params)
def update_card(params)
#...
customer.card = params[:stripe_card_token]
Parameters: {
...
"subscription"=>{ ... "stripe_card_token"=>"tok_103PCo26f8kAprmwHCPjZ6T5"},
}
<%= form_for @subscription, :html => { :id => "update_card" } do |f| %>
...
<%= f.hidden_field :stripe_card_token %>
@subscription.update_card(params[:subscription])
def update
@subscription = current_user.subscription
if @subscription.update_card(params[:subscription])
redirect_to edit_subscription_path, :success => 'Updated Card.'
else
flash.alert = 'Unable to update card.'
render :edit
end
end