2016-03-20 21 views
0

Kullanıcıları yönetmek için Devise kullanıyorum ve 3 ayrı abonelik planı oluşturmak için Stripe kullanıyorum. Çizgili alanları boş veya geçersiz olduğunda Ancak, bir hata ekranını aydınlatır ve hala Planı kimliği kayıt kontrolör şöyleDevise Kayıt formu, geçerli bir RUBY olmamasına rağmen hala bir kullanıcı oluşturuyor RUBY

No such token: undefined 

olmadan haricinde yeni kullanıcı oluşturun.

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 

Aşağıdakiler, Kullanıcım için kullanıyorum modeldir.

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 

cevap

0

Birden çok yerde tutarsızlık var.

eylemi create eylemi üzerinde select_plan zorlamadan önce zorlanıyorsunuz!

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

Ve nihayet modele içinden redirect_to yöntemi aradığınız:

before_filter :select_plan, only: :new 

Bunu bir planı yok bile rekor her iki şekilde kurtarıyorsun. Bu çağrılar, modelde değil, kontrolörde olmalıdır.

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

Tüm bu tutarsızlıkları değiştirdim ve hala sorunla karşılaşıyorum. Sorun şu ki, şerit alanları yanlış olsa da, bir şerit belirteci oluşturamıyor ve bu yüzden bana bir hata mesajı veriyorsa, resource.save_with_payment'e gidecektir. Bununla birlikte, bundan sonra bile yine de kullanıcımı kaydeder. –