2

저는 RoR을 배우고 있으며, 제가 해결하기 위해 노력하고있는 일반적인 디자인 문제가 있습니다. 나는 어떤 종류의 모범 사례를 따르도록하기 위해 답을 얻고 싶다.Ruby on Rails에서 서브 컨트롤러를 사용하려면 어떻게해야합니까?

3 개의 하위 섹션으로 구성된 페이지가 있습니다. A, B 및 C라고 부르기로합니다. 특정 동작으로 인해 AJAX를 통해 새로 고침이 발생하므로 컨트롤러 액션을 갖도록하고 싶습니다. 페이지 크롬없이 개별적으로 렌더링 할 수 있습니다.

I 현재이 구조화 한 방법은 4 작업 갖는 컨트롤러이다 지수, A는 B, C

의 각각은, B, 그리고 C는 레이아웃의 뷰를 렌더링을 => 거짓이므로 필요한 경우 AJAX를 통해 그 조각을 렌더링 할 수 있습니다. 그런 다음 색인을 가지고 A, B 및 C보기와 함께 추가 자료를 렌더링합니다.

필자가 원하는 것은 3 개의 하위 제어기와 필요에 따라 하위 제어기를 호출하는 마스터 제어기입니다. 또는 내가 은 내가 원하는 바를라고 생각합니다. 내가 A, B, C 각각에 대해 컨트롤러에서 수행하는 설정이 있기 때문에 부분보기가 아니라고 생각합니다. 그런 다음 인덱스 용 컨트롤러와 컨트롤러 용 설치 코드를 모두 복제해야합니다. 알파벳.

내가 생각하고있는 코드는 다음과 같은 것입니다 :

my_controller.rb :

class MyController < ApplicationController 
    def index 
     @aOutput = A 
     @bOutput = B 
     @cOutput = C 
     render //can use @aOutput, @bOutput, @cOutput in the view 
    end 

    def A 
     render :layout => false  
    end 

    def B 
     render :layout => false 
    end 

    def C 
     render :layout => false 
    end 
end 

이 내가 전체 페이지를 할 때 지금에 액세스 할 MyController에 # 인덱스를 저를 활성화하고 MyController에 # 것 A, 등등. 각 하위 섹션의 내용을 다시 렌더링하고 싶습니다.

코드가 이와 같이 구성되어 있으면 MyController # index에 액세스 할 때 DoubleRender 오류가 발생합니다. 이런 종류의 일에 접근하는 올바른 방법은 무엇입니까? 여기에서 만든 가정을 날려 버리십시오. 전체 페이지를 다시로드하지 않고 필요에 따라 개별적으로 업데이트 할 수있는 세 개의 섹션이있는 유일한 요구 사항 만 있으면됩니다.

답변

0

내가이 문제를 명확하게 이해하고 있는지는 잘 모르겠지만 여기에 내가 생각하는 것이 귀하의 문제라고 생각합니다.

  • 당신은 컨트롤러 액션의 전체를 호출하지 않고 단지보기를 렌더링 할 수 있어야합니다.

    당신은 아약스는이를 달성하기 위해

    사용 respond_to 블록을 호출에만 텍스트를 렌더링 할 render :action => :action_name

  • 를 사용하여 수행 할 수 있습니다. 예를 들어. 당신이 제안하는

    def whatever_action 
    
        .... # Your action voodoo here 
    
        respond_to do |format| 
        format.html { ... } # If it a normal HTTP request 
        format.js {...} # If it's an ajax or JSON request 
        end 
    end  
    

디자인은 SOLID 설계 원칙의 일부가 아닌 준수 등의 기본적인 결함을 가지고있다. 레일의 기본에 관한 좋은 책을 읽는 것이 좋습니다.

+0

이 답변은별로 도움이되지 않습니다. 이는 일반적인 디자인입니다. 필요에 따라 AJAX를 통해 대체 할 수있는 페이지 내의 특정 HTML 청크가있는 페이지를 만듭니다. 각 교체 가능한 부분이 레일스 액션에 해당하고 전체적으로 페이지가 상상할 수도 있습니다. 나는 그 조각들을 적절하게 함께 묶는 법을 모르겠습니다. 이 방법을 벗어나거나 일부 디자인 원칙을 위반하는 경우, 나는 그 방법을 알고 싶습니다. 무작위로 정적 인 단어가 일부 약어를 위반하고 책을 읽으라고 말하면 전혀 유용하지 않습니다. 책을 읽고 싶으면 여기에서 묻지 않을 것입니다. – LAW

+0

그래서 책을 읽지 않으려 고하기 때문에 stackoverflow에 대한 질문을하고 싶습니다. 간단히 [ "SOLID design principles"] (http://www.google.co.in/search?sourceid=chrome&client=ubuntu&channel=cs&ie=UTF-8&q=SOLID+design+principles&qscrl=1)를 검색하면 내 뜻을 이해하게하는 첫 번째 결과. 하지만 그렇게하고 싶지 않은 것 같습니다. – Chirantan

관련 문제