2016-07-26 7 views
0

bin Streifen für Benutzer zu abonnieren. Von dort habe ich das Stripe-Datum gesammelt und im Subscription-Modus gespeichert. Ich habe Enum für mein Benutzermodell erstellt, um verschiedene Rollen basierend auf der Stripe-Abonnement-ID zuzuweisen. hier ist, wie mein Benutzermodell wieWie aktualisiert man die Aufzeichnung in Schienen Controller

class User < ApplicationRecord 
    enum role: [:user, :gold, :platinum, :diamond ] 
    has_one :subscription 
    has_one :shipping 
    extend FriendlyId 
friendly_id :firstname, use: [:slugged, :finders] 

    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

end 

und unten ist mein Subskriptionscontroller

def subscription_checkout 
    user = current_user 
    plan_id = params[:plan_id] 
    plan = Stripe::Plan.retrieve(plan_id) 
    # This should be created on signup. 
    customer = Stripe::Customer.create(
     description: 'Customer for [email protected]', 
     source: params[:stripeToken], 
     email: '[email protected]' 
    ) 
    # Save this in your DB and associate with the user;s email 
    stripe_subscription = customer.subscriptions.create(plan: plan.id) 
    @sub = Subscription.create(plan: stripe_subscription.plan.name, 
           stripeid: stripe_subscription.id, 
           user_id: current_user.id, 
           customer: stripe_subscription.customer, 
           subscriptionenddate: stripe_subscription.current_period_end) 
    if @sub.save 
     current_user.role plan.id 
     current_user.save 
     flash[:success] = 'sub created!' 
     redirect_to root_url 
    else 
     render 'new' 
    end 
end 

aussieht, wenn es um die Rolle i

ArgumentError: wrong number of arguments (1 for 0) 

aktualisieren erreichen zu bekommen, wie kann ich das Update Rolle und was mache ich falsch?

Antwort

1

Haben Sie versucht: current_user.role = plan.id?

Es sieht so aus, als ob Sie nur die role() Methode auf dem curent_user Objekt aufrufen.

+0

das funktioniert. bekomme ich jetzt eine undefinierte Methode 'Diamant? ' für # selbst in meiner Rails-Konsole gibt 'user.diamond zurück? => true' –

+0

Wo ist Ihr umgebender Code? Haben Sie in die Konsole gesprungen, indem Sie einen Debugger platziert haben, bevor der Fehler ausgelöst wurde, oder haben Sie gerade IRB geöffnet? – arjabbar