2009-11-12 1 views
1

현재 보험과 관련된 레일 애플리케이션을 구축 중입니다. 관리자가 시스템 테이블을 제어 할 수있는 관리 섹션이 있습니다. 일부는 드롭 다운 목록에 표시되지만 일부는 자체 연결과 더 복잡합니다. 이 애플리케이션의 주된 모델은 정책입니다.이 기능은 많은 다른 테이블에 정보를 보유/링크해야합니다 (예 : 청구자, 피고, 표지의 수준, 사용자 등에 따라 달라질 수 있습니다. 각자는 주소로 연결되는 사람과 연결되는 것과 같은 자신의 연결을 가질 수 있습니다.레일 : 많은 시스템 테이블에서 가져온 레코드에 어떻게 데이터를 잠글 수 있습니까?

정책이 연결되는 더 복잡한 표 중 하나 보험료, 지불액 등을 결정하기 위해 재무 정보를 보유하고있는 전체적인 커버 등급입니다.

정책을 만들었 으면 모든 데이터의 스냅 샷을 찍어야합니다. 정책이 나중에 관리 사용자에 의해 수정되면 관련 데이터에서도 버전 제어가 필요합니다.

누구나이 문제에 대한 일반적인 해결책이 있는지 궁금합니다. 현재 나는 고아 레코드, 단일 테이블 상속, 시스템 테이블 링크를 그대로 두지 만 해당 데이터를 편집 할 수 없게 만들고, 정책 테이블의 필드에 데이터를 복사하는 것을 숙고하고 있습니다 (편집시 텍스트 상자, 만들거나) 두 개의 테이블을 만듭니다. 하나는 라이브 테이블이고 다른 하나는 템플릿입니다.

지금까지 내가 생각할 수있는 가장 좋은 점은 응용 프로그램 요구 사항에 따라 위의 여러 가지 방법을 모아 놓은 것입니다. 이것은 응용 프로그램의 일반적인 문제가되어야합니다!? 이런 유형의 문제를 해결하는 방법에 대해 더 나은 아이디어 나 조언이 있습니까?

+0

이 문제는 상거래 시스템의 주문과 관련이있는 것처럼 보입니다. 그들은 제품의 역사 클론 인 라인 항목의 목록을 유지합니다. 이들은 레코드 보관을 위해 현재 제품 레코드에 대한 키를 가질 수 있지만, 일반적으로 필요한 데이터를 전체적으로 자신의 테이블에 복제합니다. 도움이되는지 확실하지 않습니다. –

답변

1

모델 버전 관리의 경우 vestal_versions (github.com/laserlemon/vestal_versions) 플러그인이 도움이 될 수 있습니다.

+0

링크가 끊어졌습니다. http://github.com/laserlemon/vestal_versions/이되어야합니다. railscast도 찾았습니다. http://railscasts.com/episodes/177-model-versioning 이 대답을 충분히 +1 할 수 없습니다.나는 vestal_versions를 사용하지 않았지만, 올바른 일을한다고 주장하고, 나는 당신 자신의 것을 굴리려는 노력의 손해를 보았다. DRY 버전 관리 시스템은 사용자가 원하는 것입니다. 하나의 프로젝트를 위해 자신 만의 역할을 할 수있는 것은 사소한 일이 아닙니다. – cgr

+0

나는 vestal_versions의 모습을 정말 좋아하지만, 아직 너무 많이 보지 않았지만 그것이 협회를 다루지 않는다고 생각하니? 나는 그것을 잘못하고 싶다. – tsdbrown

1

응용 프로그램의 요구 사항을 정확히 알지 못하면 최상의 솔루션이 무엇인지 판단하기가 어렵습니다.

그러나 내가 읽은 것에 기초하여 나에게 즉시 떠오르는 해결책은 당신이 묘사 한 "고아 레코드"일 것이지만 왜 그들이 고아가되어야 하는지를 알지 못합니다.

는이 같은 모델을 만들 수 있습니다

class PolicyHistory< ActiveRecord::Base 
    belongs_to :policy 
end 

class Policy < ActiveRecord::Base 
has_many :policy_histories 
end 

정책의 역사는 변경 한 사용자도 특정 순간에 당신의 모든 정책 정보의 스냅 샷 및 관련 데이터를 포함하고있다.

연관을 병합하고 해당 데이터를 일련의 열에 저장할 수 있습니다. 그러나 이는 히스토리 테이블을 업데이트해야하기 때문에 관련 테이블을 변경할 때 문제가 발생할 수 있습니다.

이 솔루션은 전체 스냅 샷을 해시로 직렬화 할 수 있습니다. 정책 내역 테이블은 관련 테이블에 대한 모든 변경 사항을 처리 할 수 ​​있습니다.

본인에게 도움이되기를 바랍니다.