0

我正在尝试将我们的应用程序与 MailChimp 集成,以便将新用户添加到我们的邮件列表中,并且新的付费订阅者作为付费订阅者在邮件列表中更新(我们为此提供了 MERGE VARS)。为了在客户支付订阅费用时测试列表是否正确更新,我正在尝试使用 Stripe 的测试服务器运行代码。(我在测试之后继承了代码,所以我以前没有这样做过。)

我遇到了一个未定义的方法错误,我不知道它是从哪里来的,因为它在实时站点上工作得很好,而且我没有更改那部分代码。

在初始化文件 stripe.rb 中,我更改Stripe.api_key ="the live secret key"为测试密钥,只是插入另一个密钥。

我在 layout/application.html.erb 文件中做了同样的事情(根据 Stripe 的说明,我们在其中对 Stripe 进行了初始调用),将公共实时密钥换成了公共测试密钥。

在 account_controller 处理方法中(调用该方法对 Stripe 令牌进行支付处理并使用订阅类型更新我们的服务器。):

def processing
  begin
  if params[:coupon][0] != "_"
    @coupon = params[:coupon]
  else
    @coupon = nil
  end
  customer = Stripe::Customer.create(
  :email => current_user.email,
  :card  => params[:stripeToken],
  :plan => params[:plan],
  :coupon => @coupon
  )

  current_user.subscription = params[:plan]
  current_user.stripe_id = customer.id
  current_user.canceled = false
  current_user.save!

  rescue Stripe::CardError => e
    flash[:error] = e.message
  end
  #only this code is new, from here:
  #for gibbon updating subscription status
  gb=Gibbon::API.new
  email=current_user.email
  subscription=user.subscription
  updated_date=user.updated_at.strftime('%B %d, %Y')
  gb.lists.subscribe({:id => "our list id", :email => {:email => "#{email}"}, :merge_vars => {:SUB => "test", :UPDATE => "#{updated_date}"}, :update_existing=>true , :double_optin => false, :send_welcome=> false})
  #to here is new code

  current_user

  respond_to do |format|
      format.html { redirect_to account_confirmation_path }
  end
 end

我在 AccountController#processing 中收到“NoMethodError”

undefined method 'canceled=' for #User:an-id-here"(注意 #User: 此处的 id 位于尖括号中,但此处未显示。)错误。此代码适用于实时站点,所以这让我觉得这一定是我在这里做过的事情。Canceled 是我们用户模型上的一列,它是一个布尔值,指示他们是否已取消。它没有设置为 attr_accesible 或 attr_accessor,但正如我所说,代码没有改变并且可以在实时站点上运行。

我不确定问题是什么,我觉得我没有足够的信息来开始解决它。服务器只记录与浏览器中显示的相同的错误消息。(哦,我只在本地服务器上运行测试代码,而不是实时服务器)。

什么可能导致未定义的方法错误?我没有在我更改的代码中看到任何应该这样做的内容。

4

0 回答 0