2012-05-14 7 views
6

이상하게 들릴 것 같지만 저를 들으십시오 ... 저는 다른 컨트롤러 중 하나에 POST 요청과 동일한 기능을 수행 할 수 있어야합니다. SimpleController은 기본적으로 더 자세한 컨트롤러의 단순화 된 버전입니다. 어떻게해야 제대로 할 수 있습니까?레일 : 내부적으로 다른 컨트롤러 동작으로 POST하는 방법?

class VerboseController < ApplicationController 
    def create 
    # lots of required params 
    end 
end 

class SimpleController < ApplicationController 
    def create 
    # prepare the params required for VerboseController.create 
    # now call the VerboseController.create with the new params 
    end 
end 

어쩌면 이것을 생각해 보았지만 어떻게 해야할지 모르겠습니다.

+1

정말 필요한가요? 모델 방법으로 장황하게 작성하는 것이 더 적절하지 않습니까? –

+5

누구나 할 수 없다고 말하는 것은 대단한 일이지만 때로는 끝내야 할 때가 있습니다. 예를 들어, 인증 후 POST 데이터를 복원하는 등 –

+0

@TheDoctorWhat 인증 후 POST 데이터를 복원하는 것은 아마 이와 같은 것이 의미가있는 유일한 경우 일 수도 있고 심지어 거기에서 다른 접근 방법을 찾는 것일 수도 있습니다. 질문이 제기 된 맥락에서 확실히 의미가 없습니다. –

답변

7

Rails 앱 (또는 동일한 모델 - 어댑터보기 패턴을 따르는 웹 앱)에서 컨트롤러 간 통신은 적극적으로 피해야하는 항목입니다. 당신이 그렇게하고 싶은 유혹에 빠지면 응용 프로그램이 만들어져있는 패턴과 프레임 워크와 싸우고 있고 논리에 의존하고 있다는 표시가 응용 프로그램의 잘못된 계층에서 구현되었다는 신호로 간주하십시오.

@ismaelga가 의견으로 제안했듯이. 두 컨트롤러는이 공유 된 동작을 처리하고 컨트롤러를 "마른 체형"으로 유지할 수 있도록 몇 가지 공통 구성 요소를 호출해야합니다. Rails에서는 모델 객체의 메소드 인 경우가 많습니다. 특히이 경우에 걱정되는 것처럼 보이는 일종의 생성 동작이 필요합니다.

3

이렇게해서는 안됩니다. 모델을 만들고 있습니까? 그런 다음 모델에 두 가지 클래스 메서드를 사용하는 것이 훨씬 더 좋습니다. 또한 코드를 훨씬 더 잘 분리합니다. 그런 다음 컨트롤러 에서뿐만 아니라 백그라운드 작업 (등)을 사용할 수 있습니다. 예를 들어

당신은 사람 만드는 경우 :

class VerboseController < ApplicationController 
    def create 
    Person.verbose_create(params) 
    end 
end 

class SimpleController < ApplicationController 
    def create 
    Person.simple_create(params) 
    end 
end 

가 그 다음 사람 모델에서이 같이 갈 수 :

class Person 
    def self.verbose_create(options) 
    # ... do the creating stuff here 
    end 

    def self.simple_create(options) 
    # Prepare the options as you were trying to do in the controller... 
    prepared_options = options.merge(some: "option") 
    # ... and pass them to the verbose_create method 
    verbose_create(prepared_options) 
    end 
end 

을 나는이 조금 도움이 될 수 있기를 바랍니다. :-)

+1

다른'action : : create'으로 리디렉션하면 다른 모델을 만들 수 있습니까? – mbigras

관련 문제