2013-10-05 5 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 

Пользователь экономит, даже когда charge.successful? возвращает false. Ничего другого не происходит, поскольку не отправлено ни одного сообщения, session [: user_id] не установлен и не перенаправлен на root_path. Блок Else выполняет и визуализирует: новый и отображает флеш-уведомление, говорящее, что карта отклоняется.Как избежать сохранения после создания? Рельсы

Я пытаюсь избежать создания пользователя, если charge.successful? возвращает false. Любая идея о том, как это сделать?

ответ

5

create способ в основном комбинация @user = User.new, за которой следует @user.save.

Таким образом, вы можете использовать только .new вместо .create. Таким образом, она будет сохраняться только в базу данных при вызове .save:

@user = User.new(user_params) 
+0

Спасибо, я не могу поверить, что я не понять это. Время для отдыха! – user2170878

Смежные вопросы