0

私は開発中の Rails アプリを持っており、Stripe でプレミアム メンバーシップにサインアップし、予想通り、そのメンバーシップをキャンセルすることができます。destroyメンバーシップをキャンセルするには、ユーザーは Promembers_controller.rb 内のアクションをトリガーするボタンをクリックします。内部destroyには、インスタンス メソッドへの呼び出しがあり、cancel_subscriptionいくつかの JavaScript と共に、 を呼び出して、Stripe のメンバーシップのキャンセルを処理しcustomer.cancel_subscriptionます。Stripe テスト レコードを確認すると、メンバーシップはキャンセルされていcancel_subscriptionますが、この失敗したリダイレクトが実行され続けるため、メソッドが false を返しているようです。

redirect_to (:back),  :notice => "Not successful. Please try again or contact us."

およびアクション内の残りのコードdestroy(つまり、after@promember.cancel_subscription(id)は実行されません。

質問: (これは借用したコードです)。cancel_subscription メソッドはfalse、レスキューの最後に (レスキューが行われていない場合でも) 常に返されるようにelseなっていますか?それが、破棄アクションの句のリダイレクトが常に呼び出される理由ですか? 私がやろうとしていることを達成するためのより良い方法は何ですか?

Promembers_controller.rb

    def destroy
        id = current_user.customer_id
        @promember = current_user.promember

        if @promember.cancel_subscription(id)
              session[:pro] = nil

        current_user.customer_id = nil   #is not getting run
        current_user.promember.delete    #is not getting run
        current_user.last_four_digits = nil  #is not getting run
        current_user.save

            redirect_to lawyer_profile_path(current_user), :notice => "Premium membership has been cancelled."

        else 
            redirect_to (:back),  :notice => "Not successful. Please try again or contact us."
        end 

    end 

プロメンバー.rb

def cancel_subscription(customer_id)
      unless customer_id.nil?
        customer = Stripe::Customer.retrieve(customer_id)
          unless customer.nil? or customer.respond_to?('deleted')          
              if customer.subscription.status == 'active'
                customer.cancel_subscription
                user.remove_role :pro 
                  if user.practices.size > 1                   
                    user.practices.delete(user.practices[1])
                  end               
              end
          end
      end
    rescue Stripe::StripeError => e
      logger.error "Stripe Error: " + e.message
      errors.add :base, "Unable to cancel your subscription. #{e.message}."
      false
  end
4

1 に答える 1