2014-09-04 3 views
1

레일스 앱에서 이상한 일을해야합니다. 사용자가 create 액션을 통해 Product 인스턴스를 만든 후에는 저장하고 Braintree 결제 수단 양식으로 리디렉션 한 다음 계정에 추가하지 않은 경우 Braintree 결제 방법 양식으로 리디렉션해야합니다. 생성물.레일 컨트롤러가 다른 컨트롤러의 양식으로 리디렉션 된 다음 저장된 모델로 리디렉션

def confirm 
    @result = Braintree::TransparentRedirect.confirm(request.query_string) 

    if @result.success? 
     current_user.braintree_customer_id = @result.customer.id 
     current_user.customer_added = true 
      current_user.first_name = @result.customer.first_name 
      current_user.last_name = @result.customer.last_name 
     current_user.save! 
      redirect_to ## not sure what to put here 
    elsif current_user.has_payment_info? 
     current_user.with_braintree_data! 
     _set_customer_edit_tr_data 
     render :action => "edit" 
    else 
     _set_customer_new_tr_data 
     render :action => "new" 
    end 
    end 

내가 할 수 싶은 무엇인가

def create 
    @product = Product.new(product_params) 
    @product.set_user!(current_user) 
     if @product.save 
       if !current_user.braintree_customer_id? 
        redirect_to "/customer/new" 
       else 
        redirect_to view_item_path(@product.id) 
       end 
     else 
     flash.now[:alert] = "Woops, looks like something went wrong." 
       format.html {render :action => "new"} 
     end 
    end 

브레인 고객 컨트롤러에 대한 확인 방법은 이것이다 :

여기에 제품은 동작을 만들거야?

+0

'redirect_to @ result.customer.products.last' 시도해도 좋습니다 –

답변

1

braintree 형식으로 리디렉션하기 전에 세션 변수에 제품 ID를 저장할 수 있습니다.이 ID는 세션에서이 ID를 읽고 제품 표시 작업으로 리디렉션합니다.

if !current_user.braintree_customer_id? 
    session[:stored_product_id] = @product.id 
    redirect_to "/customer/new" 
else 
    redirect_to view_item_path(@product.id) 
end 

사용자는 단지 그가 제품 ID를 알고 있다면 유효한 URL 주소를 입력하여 제품보기 페이지를 열 수 있다는 것을 명심하십시오, 그래서 당신은 이런 상황을 처리해야합니다. before_filter를 제품 show 액션에 넣어 두뇌 트리 설정이되어 있는지 확인할 수 있습니다. 이 방법을 사용하면 생성 작업에 조건이 필요하지 않습니다. 항상 제품 쇼 페이지로 리디렉션 할 수 있으며 before_filter는 사용자가 브레인 트리 데이터를 업데이트해야하는지 확인합니다.

+0

before_filter를 추천 해 주셔서 감사합니다. –