2013-07-22 4 views
0

현재 내 레일 앱을 리팩토링하고 있습니다. 지금 까다로운 부분은 테이블 posts입니다. I가 posts를 사용하고 현재 버전에서 레일에서 단일 테이블 상속의 복잡성을 해결하는 방법은 무엇입니까?

:

  • 질문
  • 개의 댓글 post_type 속성을 사용

에 응답합니다.

관계 :

  • 질문은 많은 답변과 의견이있다.
  • 답변에 많은 의견이 있습니다.
  • 답변은 질문에 속합니다.
  • 댓글은 답변 또는 질문에 속합니다.

지금까지 내가 같은 테이블을 사용하여 별도의 모델로 질의 응답 후 유형을 분할했다 : posts. 그러나 코멘트와 나는 다음과 같은 문제가 있습니다 :

모든 게시물,하지만 의견, 논평. comments 테이블을 추가로 만들고 포스트 테이블을 상속하는 대신 각 포스트 유형에 '주석 가능'한 다형성 연관을 만드는 것이 좋습니다.

+1

내가 'quesions and answers table'에서 'comments'를했을 때 (또는 대답 주석을 위해 posts 테이블을 재결합하게 될 것이기 때문에) 'commentable'로 풀어내는 것이 합리적이라고 생각한다. 더 깨끗해 보인다. 이것은 질문 주석과 대답 코멘트가 동일한 필드/요구 사항을 가지고 있다고 가정한다. – Doon

+0

예 코멘트 구조자는 모든 게시물 유형에 대해 동일하다. 또한 전체 게시물 테이블을 질문과 대답으로 분할하여보다 쉽게 유지 보수. – sn3ek

답변

1

그런 다음 처음에는 모델을 분리하지 않고 (덜 파괴적이지 않은 변경으로) 먼저 db 테이블을 분리하는 두 번째 단계로 질문을 읽었습니다.

의견에 대해서는 AnswerQuestion과 다형성으로 연결된 Comment 모델이 있어야한다고 생각합니다.

그래서 첫 번째 단계에서 당신이로 현재 Post 모델을 분리해야합니다, Question Answer을하고 Comment하지만 게시물을 DB 테이블을 계속 사용

초 (그래서 적절한 post_type 값을 설정 이러한 모델의 각 default_scope 추측) 단계는 (처음 테스트를 거친 후 다시 테스트하고 심지어 테스트를 압축하기 위해 배포 한 후) 각 모델의 데이터를 별도의 db 테이블로 마이그레이션하는 것입니다. 그것으로 인해 앱 설계가 쉬우 며, 단일 테이블에서 데이터가 줄어들 것입니다. SQL 쿼리 수가 변경되지 않기 때문에 성능에 부정적인 영향을 주어서는 안됩니다.

+0

고마워. 내가 할 일이라고 생각해. 나는 RailsCast를 STI와 Polymorphism으로보고 있었고 더 나은 유지 보수를 위해 STI를 제거하기로 결정했다. – sn3ek