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

ユーザーは充電しても保存します。成功しましたか? false を返します。電子メールが送信されず、session[:user_id] が設定されておらず、root_path にリダイレクトされていないため、他に何も起こりません。Else ブロックが実行されて :new がレンダリングされ、カードが拒否されたことを示すフラッシュ通知が表示されます。

charge.successful の場合、ユーザーの作成を回避しようとしていますか? false を返します。これをどうやって進めるかについて何か考えはありますか?

4

1 に答える 1

5

この方法は、基本的には do の後に をcreate組み合わせたものです。@user = User.new@user.save

.newしたがって、の代わりに使用できます.create。そうすれば、呼び出したときにのみデータベースに永続化されます.save

@user = User.new(user_params)
于 2013-10-05T23:22:45.170 に答える