2010-02-08 6 views
3

Rails에서 프로세스에 더 많은 단계를 추가 할 때 모범 사례 (또는 일반적인 관행)는 무엇입니까?Rails에서 액션 간의 컨트롤러 삽입 삽입 - 모범 사례

예를 들어 Spree e-commerce Rails platform으로 작업 중이며 제품을 장바구니에 추가하려고 할 때 작성해야하는 여러 단계 양식을 추가하고 싶습니다.

장바구니에 제품을 추가 한의 현재 마구 구현은 기본적으로 :

장바구니에 제품을 추가하고, 카트에서 당신을 잎

ProductsController#show -> OrdersController#edit

. 내가 생각하고 무엇

ProductsController#show -> SurveysController#show -> (survey stuff...) -> OrdersController#edit

: 그래서

내가 가장 최소한 마구의 핵심 코드를 변경하기 위해, 궁금 해서요, 어떻게 그 과정이 더 같은, 그래서 어떻게해야합니까 하는 것입니다 : 그것은 surveys_controller.rb 간다 있도록

  • 는 "제품/show.html.erb"를 수정합니다. 또한 products_controller.rb를 수정하여 SurveysController에서 처리 할 수있는 session[:redirect_to] = order_checkout_path을 입력하십시오.
  • 또는 그냥 여분의 것들을 팝업으로 만들고, 마지막에 도착하면 원래의 메소드를 호출하십시오.

무엇이 잘못 되었나요? 더 나은 접근 방법은 무엇입니까? 이것은 좀 더 일반적으로 사람들이 핵심 코드를 수정하지 않고 여러 단계의 프로세스를 설계하는 방법에 대한 질문입니다. wizard이 아니라 다른 것들의 중간에 여분의 물건을 추가하십시오. 레일이 더 쉬운 방법을 제공하지 않기 때문에 무슨 일이 있어도 당신의 도움에 대한

감사합니다, 그것은 RESTful 웹 응용 프로그램에서 매우 표준 흐름이 아니다 랜스

답변

0

, 그래서 누군가 hackish해야 할 것이다.

세션 변수는 나에게 좋을 것 같습니다. 짧고 간단합니다. 당신은 미래의 갈등을 볼 수 없도록 당신의 열쇠를 좀 더 기술적으로 설명하고 싶을지도 모릅니다.

1

당신은 restful_workflow을 확인 수 있습니다

이 플러그인은 인터뷰 스타일을 터보 택스와 유사한 컨트롤러 워크 플로우를 제공하지만, 즉시 데이터베이스에 모델을 저장할 필요없이. 재정의하지 않는 한 모든 데이터는 세션에 저장됩니다.

0

당신은 orders_controller_decorator.rb를 시도?

OrdersController.class_eval do 
    before_filter :show_survey, :only => :populate 
    def new_survey 
    #regular stuff 

    respond_to do |format| 
     format.html do 
     #if you've already been through this process, skip the before_filter 
     redirect_to(new_order_line_item_url(session[:order_line_item])) and return if session[:order_line_item] 
     #otherwise point to the form and store the order data in session 
     session[yeahyougetthepoint] 
     render 'new_survey' 
     end 
    end 
    end 
    def create_survey 
    #regular stuff 
    respond_to do |format| 
     format.html {redirect_to new_order_line_item(session[:order_line_item]} 
    end 
end 

은 내가 'add_to_cart'과정의 100 % 확실하지 않다,하지만 쉽게 로그에서 모든 일을 통해 파고에 의해 추론 할 수있다. Spree에 자신 만의 흐름을 넣는 것은 약간 이상하지만, 확실히 할 수 있습니다.