2010-08-19 3 views
6

컨트롤러 내부의 액션을 모델 내부의 메소드에서 호출해야합니다. 이것은 다른 언어로 많이하는 일입니다 (MVC 프레임 워크로 작업 할 때). 그러나 루비와 함께이 작업을 한 번도 본 적이 없습니다. 액션은 아무 것도 렌더링하지 않으며 단순히 세션 변수를 업데이트합니다.Rails 컨트롤러 액션을 호출하는 모델

답변

5

MVC 패턴에서 일반적으로하는 일이 아닙니다. 모델에는 실제로 비즈니스 로직 (및 데이터 액세스) 만 있어야합니다. 전화하려는 내용과 그 이유에 대한 정보를 제공 할 수 있습니까? 보통 이런 식으로하려고 할 때 뭔가가 있어야 할 곳이 아닌 냄새가 난다.

이 보통 내가 볼 수있는 방법입니다

  • 모델 - 이러한 데이터는 는 비즈니스 로직
  • 컨트롤러에 대한 방법을 가지고 객체 - 다음은 제어 앱에 의해 취해진 조치입니다 모델은 그들이 는
  • 보기를 방출 무엇에 그것을 말해보기를 제어 , 무엇을 그들에게 -이 인터페이스 층을 그것은,JS, 모든 형식 (HTML에있을 수 있습니다XML)하지만 당신은 모델에서 컨트롤러에 뭔가를 호출하려는 경우가 그것을

에 약간의 논리를 가지고, 그것은 모델의 제어 로직이 너무 거기에 의미 할 수 있습니다.

또는 어쩌면 방금 도처에서 사용할 수있는 메소드가 있습니다 (이는 도우미 메소드이며 실제로 모델과 컨트롤러와 관련이 없습니다). 이 경우,/lib 디렉토리의 자체 모듈에 넣어야합니다.

편집 : 예, 세션 변수는 컨트롤러에서만 터치/업데이트해야합니다. 아마도 당신은 당신의 모델에 너무 많은 컨트롤 타입 로직을 가지고있을 것입니다. 컨트롤러의 실제 동작의 일부인 경우 로직이 실제 모델과 얼마나 밀접하게 연관되어 있는지 다시 생각해보십시오.

+0

문제는 내가 인증을위한 플러그인을 가지고 있고 사용자가 (플러그인 내부에 나를 기억 기능을 통해 로그인 할 때 메소드를 호출 할 필요가있는 BYP 모든 로그인 컨트롤러 동작을 조사합니다. 그렇지 않은 경우 여기에서 세션 데이터를 분명히 변경합니다. 컨트롤러에서 메서드를 호출해야하는 이유는 분석 추적과 관련이 있으며 실제로는 사용자가 볼 수있는 것이 아닙니다. – scott

0

당신은 컨트롤러 액션 호출합니다 (session@session 변수로 정의되어 있기 때문에 또는 cahange 세션과 개인의) 당신이 유사 할 수 있습니다 편집 session 방법이 필요합니까 그래서 만약 당신이 모델의 메소드에 PARAM으로 컨트롤러 인스턴스를 전달한다 모델 경우 컨트롤러

def change_session(controller) 
    @ses = controller.send :session 
    //some actions 
end 

def something 
    s = Session.new 
    s.change_session(self) 
    ... 
end 
관련 문제