Ruby on Rails 지방 모델, 스키니 컨트롤러


"Fat Model, Skinny Controller"는 MVC의 M과 C 부분이 이상적으로 함께 작동하는 방식을 나타냅니다. 즉, 응답이없는 로직이 모델에 들어가야합니다. 이상적으로는 테스트 가능한 좋은 방법입니다. 한편, "마른 체형"컨트롤러는 뷰와 모델 사이의 멋진 인터페이스입니다.

실제로 이것은 다양한 유형의 리팩터링을 필요로 할 수 있지만, 모두 하나의 아이디어로 넘어갑니다. 응답 대신 컨트롤러가 아닌 모델로 이동하면 재사용을 촉진했을뿐만 아니라 가능하면 요청 컨텍스트 외부에서 코드를 테스트 할 수있게 만들었습니다.

간단한 예를 살펴 보겠습니다. 다음과 같은 코드가 있다고 가정 해보십시오.

def index
  @published_posts = Post.where('published_at <= ?', Time.now)
  @unpublished_posts = Post.where('published_at IS NULL OR published_at > ?', Time.now)
end

다음과 같이 변경할 수 있습니다.

def index
  @published_posts = Post.published
  @unpublished_posts = Post.unpublished
end

그런 다음 논리를 게시물 모델로 이동하면 다음과 같이 표시됩니다.

scope :published, ->(timestamp = Time.now) { where('published_at <= ?', timestamp) }
scope :unpublished, ->(timestamp = Time.now) { where('published_at IS NULL OR published_at > ?', timestamp) }