0

전 질병 기록부 작성 중입니다. 새로운 featur에 대한 도움이 필요합니다.Ruby on Rails - 일대일/대다수? 비틀어 진 양방향 다형성

데이터베이스에는 여러 방문 테이블 (V1, V2, V3)이 있습니다. 다른 샘플을 방문 (대변, 면봉, 혈액 등)에서 수집 할 수 있습니다. 각 샘플에는 특정 샘플 ID (문자열)가 있으며 샘플 ID가 주어지면 샘플 테이블을 검색하여 (양방향 관계) 샘플 출처와 샘플 출처를 확인해야합니다.

이제 2 가지 아이디어가 있습니다. 그것이 샘플링 어떤 트랙을 유지하기 위해

  1. 각 매장 테이블은 샘플 테이블의 고유 ID (즉 stool_sample, swab_sample)를 특정 샘플에 일대일 기준을 갖는다. 그러나 양방향 관계 (검색 중에 방문 할 샘플)를 얻기 위해서는 샘플 테이블과 다형성 관계를 만들어야합니다. 이 방법을 사용하면 일반적으로 나쁜 생각처럼 느껴지는 ID를 양면에 저장해야합니다.

  2. send 메소드는 샘플 테이블에서 단순히 다형성 관계를 수행하고 샘플 유형을 테이블에 추가 열로 추가합니다. 그러나 뷰 페이지에서 생성/업데이트시 견본 유형을 하드 코딩해야합니다.

나는 이것에 대한 의견이 있으면 궁금한가요? 아니면 더 나은 해결책이 있습니까? 샘플 코드를 사용하면 매우 익숙합니다.

답변

1

샘플 (변화하는 방문 유형/테이블을 허용하는 다형성) 방문에 속하는 것을 날 것으로 보인다 감사드립니다. 자기 참조 또는 하드 코딩이 필요 없습니다. 또한 추상 Visit 클래스는이 DRY을 유지 할 수 있습니다 :

class Visit < ActiveRecord::Base 
    self.abstract_class = true 
    has_one :sample, as: :visit 
    belongs_to :patient 
end 

class VisitOne < Visit 
end 

class VisitTwo < Visit 
end 

class Sample < ActiveRecord::Base 
    belongs_to :visit, polymorphic: true 
    delegate :patient, to: :visit 
end 

class Patient < ActiveRecord::Base 
    has_many :visit_ones 
    has_many :visit_twos 
end 

이제 찾을 수 VisitSample에 따라 Patient뿐만 아니라 SamplePatientVisit에 따라. 각 Patient에 대한 다양한 Visit 유형을 추적 할 수도 있습니다. 샘플 'type'(wince, 더 정확한 다른 용어를 사용하려고 시도 함)은 Sample에 텍스트 필드로 간단하게 저장할 수 있습니다. 이러한 유형을 코드의 열거 형으로 하드 코딩하지 않으려면, 당신은 당신의 샘플 타입을 유지하기위한 테이블을 만들 수 있고, SampleSampleType에 속합니다.

+0

고맙다. 사진을 찍어 주겠다. – hook38

+0

보기 페이지에서 어떻게 만들거나 업데이트 할 수 있을까? 샘플 유형은 어떻게 정의합니까? 당신은 나에게 몇 가지 샘플 코드를 주시겠습니까 – hook38

+0

그런데, 나는 simple_form을 사용하고 있습니다 – hook38