2013-10-05 4 views
0
def create 
    @user = User.create(user_params) 
    if @user.valid? 
     charge = StripeWrapper::Charge.create(amount: 999, card: params[:stripeToken], description: "Sign up charge for #{@user.email}") 
     if charge.successful? 
      @user.save 
      User.inviter_and_invited_follow_each_other(@user) 
      AppMailer.delay.welcome(current_user) 
      session[:user_id] = @user.id 
      flash[:notice] = "You have successfully registered and will be logged in." 
      redirect_to root_path 
     else 
      flash[:notice] = charge.error_message 
      render :new 
     end 
    else 
     render :new 
    end 
end 

L'utilisateur économise même lorsque charge.successful? renvoie false. Rien d'autre ne se passe, car aucun courrier électronique n'est envoyé, session [: user_id] n'est pas défini et n'est pas redirigé vers root_path. Le bloc Else s'exécute et restitue: nouveau et affiche un avertissement indiquant que la carte est refusée.Comment éviter d'enregistrer après avoir créé? Rails

J'essaie d'éviter la création de l'utilisateur si charge.successful? renvoie false. Une idée sur la façon de s'y prendre?

Répondre

5

La méthode create est essentiellement une combinaison de @user = User.new suivi de @user.save.

Vous pouvez donc simplement utiliser .new au lieu de .create. De cette façon, il ne sera que persistait à la base de données lorsque vous appelez .save:

@user = User.new(user_params) 
+0

Merci, je ne peux pas croire que je ne l'ai pas comprendre cela. Temps pour une pause! – user2170878

Questions connexes