Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.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 使用Coffeescript更新Stripe信用卡_Ruby On Rails_Ruby_Forms_Coffeescript_Stripe Payments - Fatal编程技术网

Ruby on rails 使用Coffeescript更新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

我终于想出了如何使用这个工具实现每月计费

目前,我的#新建#订阅表单和编辑表单的提交按钮都会创建信用卡数据并将其发送到Stripe

但由于某些原因,我在更新信用卡时不断遇到此错误

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