2013-07-27 3 views
3

내 모델의 함수에서 거의 모든 "공유"문을 사용합니다.컨트롤러 액션이 초기 find 또는 new 이외의 하나의 모델 메소드를 호출해야하는 이유는 무엇입니까?

컨트롤러 액션 찾을 초기 보다 하나의 모델 방법 다른 호출해야하거나 새로운

: 문제는 내가 내 컨트롤러에서 이러한 기능을 하나 더 후 사용해야하는 경우에 나는 다음과 같은 오류를 얻고 있다는 것입니다

와 IDE가 설명 깊은 간다 :

컨트롤러 액션이 .new를 초기 .find 또는 이후에 하나 이상의 모델 메서드 호출을 포함하는 경우이 검사는 경고합니다. 은 모델 클래스 내에 모든 비즈니스 로직을 구현하고 메서드를 사용하여 액세스하는 것이 좋습니다.

이것은 모든 논리를보다 복잡한 모델 함수에 넣어야한다는 의미입니까? 컨트롤러의 작업은 모델 함수를 호출하고 결과를 뷰에 전달하는 것이라고 생각했습니다.

모델 기능 코드를 다시 컨트롤러에 넣으면 모든 것이 작동하지만 모든 컨트롤러 동작에서 코드 중복이 발생합니다.

그래서 올바른 접근 방법은 무엇입니까?

답변

2

실제로 경고 메시지는 논리가 단일 모델 기능에 있어야하지만 반드시 더 복잡한 기능이 될 필요는 없음을 의미합니다. 모델 중복 및/또는 "팻 모델"문제를 피하려면 모델이 의존하는 추가 클래스를 도입해야 할 수도 있습니다.

예, 제어 작업은 초기 작성/찾기 외에 컨트롤러 작업 당 하나의 모델 함수에 대한이 검사 지침에 따라 모델 기능을 호출하지만 얇은 베니어로만 호출합니다.

컨트롤러 수준에서 항상 공유 기능을 소개 할 수 있으므로 함수를 다시 이동하면 컨트롤러에서 코드 중복을 가져 오는 것에 대한 의견을 잘 모르겠습니다. 그러나 다시 한번, 요구되는 지원 클래스를 가진 "얇은 컨트롤러"와 "합리적으로 얇은 모델"의 권장 접근 방식이 아닙니다.

+0

그래서 컨트롤러 수준에서 새 모델 메서드 또는 공유 메서드를 만드는시기를 정의하는 규칙이 있습니까? 나는 레일에 새롭고 사실 내 컨트롤러에있는 유일한 방법은 기본 컨트롤러 (새/수정/업데이트/등)입니다. – gotqn

+0

내가 알고있는 어렵고 빠른 규칙은 없으며 " 얇은 컨트롤러 "와"뚱뚱하지 않은 모델 ". 다시 말하면 두 가지 외에 다른 선택은 모델에서 사용할 새로운 클래스를 만들어 컨트롤러 나 모델에서 추가 메서드가 필요하지 않도록하는 것입니다. –