2014-09-25 1 views
0

회원이 추가 기능에 액세스 할 수 있도록 프리미엄 멤버쉽으로 업그레이드 할 수있는 앱을 개발하고 있습니다 (Stripe로 결제 한 후). 테스트 모드에서 생산에만 Stripe을 사용하고 있으므로 Heroku 콘솔에서 프리미엄 사용자를 만드는 방법을 찾고 있습니다. 이 내 schema.rb 파일에테스트 모드에서 스트라이프를 사용할 때 프로덕션 환경에서 내 앱의 프리미엄 기능을 테스트하기 위해 프리미엄 사용자를 만들려면 어떻게해야합니까?

user = User.find_by(name:’existing user name’) 
user.update_attribute(‘premium’).save 

내가 t.boolean "premium"이를? :처럼 뭔가 될 것이다.

프로그래밍에 익숙하지 않으므로 추가 파일 정보가 필요한 경우 알려주십시오. 감사!

편집 업데이트 : 여기 내 요금 컨트롤러 코드 :

class ChargesController < ApplicationController 

    def new 
    @stripe_btn_data = { 
     key: "#{ Rails.configuration.stripe[:publishable_key] }", 
     description: 'Premium Membership', 
     amount: 1_299 

    } 
    end 


    def create 

    @amount = params[:amount] 


    customer = Stripe::Customer.create(
    email: current_user.email, 
    card: params[:stripeToken] 
    ) 

    charge = Stripe::Charge.create(
    customer: customer.id, 
    amount: @amount, 
    description: 'Premium Membership', 
    currency: 'usd' 
    ) 

    current_user.update_attribute(:premium, true) 

    redirect_to wikis_path, flash: { notice: "Congratulations, #{current_user.email}, on becoming a premium member!"} 


rescue Stripe::CardError => e 
    flash[:error] = e.message 
    redirect_to new_charge_path 
end 
end 

답변

2

내가 컨트롤러에 그렇게 같은 새로운 스트라이프 충전, 생성하는 메소드를 호출한다고 가정 : 그 내부

@user.update_with_payment 

을 메서드를 사용하여 스트라이프 토큰을 기반으로 사용자에게 요금을 청구해야합니다. 당신이 할 수있는 것은 해당 메소드에 조건을 설정하여 요금이 성공적이면 프리미엄 속성이 참이되도록 사용자를 업데이트하는 것입니다. 청구가 성공적이지 않으면 지불 서식을 다시 작성하고 적용 가능한 오류를 표시하십시오.

if @user.update_with_payment 
    @user.update_attribute(:premium, true) 
    # You can than redirect wherever you want 
    redirect_to @user 
else 
    render :new 
end 

테스트 모드가 바로 라이브 모드와 같은이 방법을 실행하기 때문에, 자신의 목적에 프리미엄 속성을 수신 할 수 있도록 스트라이프 테스트 모드에서 사용자를 가능하게 할 것이다 이런 식으로 컨트롤러를 설정. Stripe에 대한 메소드와 로직을 설정할 때 모든 로직을 Rails 앱에 넣으면 테스트 모드가 라이브 모드가 작동하는 방식대로 작동합니다. 콘솔에서 사용자 개체를 업데이트하지 마십시오.

+0

나는이 개념을 이해하고 있지만 내 요금 컨트롤러 나 내 코드의 다른 곳에서는 @ user.update_with_payment가 없다. 내 청구자 컨트롤러를 게시 했으니 까 다른 제안이 있으십니까? 감사! –

+0

코드를 변경하지 않고 데이터베이스에서 해당 사용자를 명시 적으로 업데이트하려면 상단에 'fourfourjew'가 제안한 것을 수행하고 (사용자 = user.find (1)) AR을 사용하십시오 'update_attribute' 메쏘드는 속성을 취하고 인자로 값을 인자로받습니다 :'user.update_attribute (: premium, true)' – Sasha

+0

사샤, 콘솔에 사용자 객체를 업데이트하지 않는다고 언급 한 이유는 무엇입니까? ? 프로덕션 환경에서 데이터베이스가 엉망이 될 수 있습니까? –

관련 문제