2016-03-20 2 views
0

Deviseを使用してユーザーを管理しています。ストライプを使用して3つのサブスクリプションプランを設定しています。ストライプフィールドが空または無効であるときしかし、それはエラー画面が点滅し、まだ計画のID登録コントローラは、次のようになりますStripeが有効ではないにもかかわらず、Devise登録フォームがまだユーザーを作成していますRUBY

No such token: undefined 

ないことを除いて、新規ユーザーを作成します。

class Users::RegistrationsController < Devise::RegistrationsController 
    before_filter :select_plan, only: :new 

    def create 
    super do |resource| 
     if params[:plan] 
     resource.plan_id = params[:plan] 
     if resource.plan_id == 4 || resource.plan_id == 5 || resource.plan_id == 6 
      resource.save_with_payment 
     else 
      resource.save 
     end 
     end 
    end 
    end 

    private 

    def select_plan 
     unless params[:plan] && (params[:plan] == '4' || params[:plan] == '5' || params[:plan] == '6') 
     flash[:notice] = "Please select a membership plan to sign up." 
     redirect_to root_url 
    end 
    end 
end 

以下は、自分のユーザーに使用しているモデルです。

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    belongs_to :plan 
    attr_accessor :stripe_card_token 

    def save_with_payment 
    if valid? 
     customer = Stripe::Customer.create(description: email, plan: plan_id, card: stripe_card_token) 
     self.stripe_customer_token = customer.id 
     save! 
    else 
     redirect_to root_url 
     flash[:Danger] = "There was an error with processing your payment. Please try again." 
    end 
    end 

end 

答えて

0

複数の場所に矛盾があります。

のフィルタの前にselect_planのフィルタを適用していますが、createのアクションではありません。

before_filter :select_plan, only: :new 

あなたはそれを計画していない場合であっても、レコードのいずれかの方法を保存している:

if resource.plan_id == 4 || resource.plan_id == 5 || resource.plan_id == 6 
    resource.save_with_payment 
else 
    resource.save 
end 

をそして最後には、モデルの内側からredirect_toメソッドを呼び出しています。これらの呼び出しは、モデルではなく、コントローラ内になければなりません。

redirect_to root_url 
flash[:Danger] = "There was an error with processing your payment. Please try again." 
+0

これらの不一致がすべて変更されていますが、まだ問題が発生しています。問題は、ストライプフィールドが間違っていてもresource.save_with_paymentに行き、ストライプトークンを生成できないためにエラーメッセージが表示されることです。 しかし、この後も、ユーザーはまだ保存されます。 –

関連する問題