2009-08-22 6 views
0

몇 가지 유사한 특성을 가진 여러 모델보기 - 컨트롤러가있는 레일스 애플리케이션이 있습니다. 예를 들어 5 가지 모델에 대한 댓글을 달거나, 투표하거나 태그를 지정할 수 있으며, 외부 플러그인을 많이 사용하고 있습니다. .반복 된 레일스 코드를 최적화하는 올바른 방법

의견, 표, 태그 등을 단일 모델 (보기 및 컨트롤러)에만 소개했습니다. 그러나 결과에 만족 했으므로 한 모델의 특정 MVC에서이 공통 기능을 잘라 내고 다른 모든 모델에서이 모델에 액세스 할 수있게하려고합니다.

몇 가지 질문 나는이 일을 시작하기 전에 (그리고 아마도 몇 가지 일반적인 조언도 큰 것) :

1 - 나는 그것에 대해 어떻게 가야하나요? 나는 "lib"디렉토리에있는 모듈을 만드는 것을 생각하고 있었다. (믹스 인 클래스와 같은가?) 재사용 가능한 뷰 코드를 공통 부분으로 옮긴다. 컨트롤러 코드는 어떻습니까?

2 - 처음 모델을 코딩하는 동안 Ruby on Rails를 배우면서 컨트롤러에 여러 가지 메소드를 추가하는 잘못된 방법을 사용했습니다. 덧글 (addcomment)을 추가하는 방법, 투표 (addvote)를 추가하는 등의 방법이 있습니다. 이러한 모든 메서드는 컬렉션을 통해 비표준 (비 RESTful) 라우팅이 필요합니다. 내가 아는 바로는, 코멘트 컨트롤러 기능을 자체 컨트롤러로 이동하고 표준 RESTful 경로를 통해 액세스하는 것이 올바른 방법입니다. 내가해야 할 일 이니?

3 - 많은 플러그인 (예 : act_as_commentable)은 명시 적으로 모듈로드, 모델의 어딘가에있는 "act_as_commentable"행을 명시 적으로 요구하지 않습니다. 내 공통 기능에 이와 같은 것을 사용할 수 있습니까? 어떻게 작동합니까?

답변

3
  1. 간단한 방법은 코드를 모듈로 분할하고 mixin을 사용하는 것입니다. , http://guides.rubyonrails.org/plugins.html

  2. 올바른 방법은 의견 컨트롤러를하는 것입니다, 그리고 당신의 모델에 중첩이 있습니다 더 좋은 방법은 같은 act_as_commentable 당신은 여기에 대해 배울 수 있습니다 .. 당신의 공통 코드에 대한 자신의 플러그인을 작성하는 것입니다/mymodelname/1/comments와 같은 편안한 경로를 제공합니다. 그런 컨트롤러를 만드는 쉬운 방법은 inherited_resources plugin을 사용하는 것입니다. "Polymorphic belong to"섹션까지 스크롤하십시오 - 주석 컨트롤러 예제가 있습니다

2

반복 모델 코드의 경우 lib 디렉토리의 모듈에 넣으십시오.

컨트롤러 코드의 경우, 중복 코드를 ApplicationController에 넣으십시오.

보기 코드의 경우 partials를 사용하십시오.

+0

컨트롤러 코드에 대해서도 모듈에 넣을 수 있습니까? (예를 들어 모델의 경우 CommonModel, 컨트롤러의 경우 CommonController?) 일부 Classes에는 추가 컨트롤러 메소드가 필요하지 않습니다. – Vlad

관련 문제