2011-08-09 2 views
0

그래서 .. 하위 컨트롤러에있는 것과 같은 슈퍼 컨트롤러에있는 메소드가 있습니다 .. 항목이 저장되지 않는 경우 redirect_to를 제외하고 모두 ..RoR : 슈퍼 및 하위 분류 컨트롤러

서브 클래스 방법 :

def create 
some logic 
respond_to do |format| 
     if @template_object.save 
     format.html { redirect_to({:controller=>:template_objects,:action=>:build,:id=>@template_object}) } 
.. 
end 

슈퍼 방법 :

def create 
some logic 
respond_to do |format| 
     if @template_object.save 
     format.html { redirect_to({:controller=>:objects,:action=>:build,:id=>@object}) } 
.. 
end 

이것에 대해 갈 수있는 가장 좋은 방법은 무엇입니까?

답변

1

수퍼 클래스와 하위 클래스 모두 redirect_to가 있습니까? 이 경우 세션 변수와 같은 플래그를 사용하여 수퍼 클래스에서 redirect_to를 사용할지 또는 건너 뛸지 결정해야 할 수 있습니다.

devise는 devise를 사용하여 로그인 한 후 특정 페이지로 리디렉션해야 할 때와 같은 기술을 사용합니다.

수퍼 클래스

def method 
    ...some logic... 
    if !session[:redirect_var].nil? 
     session.delete :redirect_var 
     redirect_to .... 
    end 
end 

당신의 서브 클래스는

def method 
    session[:redirect_var] = 'skip_redirect' # or whatever, just create a session variable to use as a flag 
    super 
    ...some method... 
    redirect_to .... 
end 
1

이에 대한 일반적인 "객체 지향"접근 방식은, 모두 호출 할 수있는 방법을 만들 그들 각각 다르게 정의하는 것입니다 : 아이디어는 서브 클래스가 다시 할 수 있도록하는 것입니다

def redirect_to_completed_template(template_object) 
    redirect_to(...) 
end 

- 그들이 필요로하는 기능의 일부만을 정의하십시오. 그렇기 때문에 기능이 특히 복잡한 것은 아니지만 기능으로 분류 된 특정 기능을 자주 볼 수 있습니다.

+0

이 나보다 훨씬 더 우아한 해결책이 될 것으로 보인다. 구현 방법을 자세히 설명해 주시겠습니까? ** redirect_to_completed_template **에 무엇을 전달합니까? 나는 이것을 사용하는 법을 배우고 싶다. – rookieRailer

+0

당신은 당신의 경우에 따라'@ object' 나'@ template_object'처럼 보일 것입니다. 'redirect_to' 라인은 하나 또는 다른 것입니다. – tadman

+0

답장을 보내 주셔서 감사합니다. – rookieRailer

관련 문제