1

Books라고하는 컨트롤러 (및 해당 Book 모델)와 Users (및 해당 User 모델)라는 컨트롤러가 있다고 가정 해 봅니다. 각 컨트롤러에는 표준 CRUD 작업이 있으며 내 웹 사이트 API의 수단 역할을합니다.Rails 컨트롤러를 DRY 상태로 유지하고 자체 API를 활용하려면 어떻게해야합니까?

내 사이트의 대부분의 페이지는이 프레임 워크에 쉽게 맞습니다. 예를 들어, 책보기. 또는 사용자 계정을 봅니다. 또는 사용자 계정을 편집하십시오. 기타

색인이 다소 고유 할 것이라고 가정 해 봅시다. 나는 사용자 목록과 책 목록을 보여주고 싶습니다. 다음과 같은 몇 가지 질문이 제기됩니다.

  • UsersController, BooksController 또는 새 컨트롤러 중 어떤 컨트롤러를 사용해야합니까?
  • 새 컨트롤러를 만들면 특히 특정 모델에 연결되지 않으므로 MVC 원칙을 위반 한 것으로 간주됩니까?
  • 이 새로운 컨트롤러 작업으로 데이터를 검색하는 방법은 무엇입니까? 만약 내가 새로운 ActiveRecord 쿼리를 작성한다면, 나는 이미 다른 컨트롤러에서 이와 같은 코드를 가지고 있기 때문에 반복하고있다. 가능한 경우 내 API를 사용하는 것을 선호합니다.

답변

1

모델에서 스코프 (Google 검색)를 사용하여 컨트롤러를 마른 상태로 유지할 수 있습니다. 표시 할 내용에 따라 새 메서드 및 뷰를 만들 수 있습니다. 별도의 모델에있는 책과 저자를 나열하는 사용자 대시 보드가 있다고 가정 해 보겠습니다.

사용자와 관련이 있으므로 사용자 대시 보드 내부에 def 대시 보드라는 새로운 방법을 만들 수 있습니다.

def dashboard 

end 

특정 쿼리의 범위를 지정하려면 모델에 도우미 메서드를 만듭니다. 또한 route 파일에 적절한 경로를 추가하는 것을 잊지 마십시오.

희망 하시겠습니까?

0

원하는 것을 선택하십시오.

1) 어쩌면 다른 컨트롤러를 쓸 수도 있지만, 애플리케이션의 컨텍스트에 따라 변경 될 수 있습니다.

2) 두 모델 모두에서 데이터를 가져옵니다. MVC 규칙 매핑 컨트롤러와 모델은 일대일로 존재하지 않습니다.

나는 "쿼리"가 무슨 뜻인지 잘 모르겠지만 모델 메서드 (또는 범위)에 넣으면 DRY를 피할 수 있습니다. 물론 ActiveRecord가 메서드 (예 : User.find (n))로 구체화하기 때문에 컨트롤러에서 간단한 쿼리를 수행해야합니다.

관련 문제