0

我正在研究一個preexit疾病註冊表,我需要一些新功能的幫助。Ruby on Rails - 一對一/很多?雙向多態與扭曲

在數據庫中,有幾個表格負責患者的不同訪問(稱爲V1,V2,V3)。訪問時可以收集不同的樣本(糞便,棉籤,血液等)。每個樣本都有一個特定的樣本ID(字符串),並給出一個樣本ID,我需要搜索樣本表(雙向關係),並找出哪個樣本來自哪個樣本,以及哪個樣本來自樣本。

現在,我有2個想法。

  1. 爲了跟蹤什麼樣是,每次訪問表具有一到一個參考特定樣品(即stool_sample,swab_sample),這是在樣品表中的唯一ID。但爲了實現雙向關係(在搜索過程中訪問樣本),我需要從樣本表中創建一個多態關係。這種方法要求我在兩邊存儲id,這通常感覺是一個壞主意。

  2. send方法只是在樣本表上做一個多態關係,並將樣本類型添加爲表中的額外列。但是,這需要我在查看頁面上創建/更新時對樣本類型進行硬編碼。

我只是想知道如果有人對這些有什麼建議嗎?還是有更好的解決方案?由於我對此很陌生,所以最好使用示例代碼。

謝謝

回答

1

在我看來,一個樣品應該屬於一個訪問(多態性允許不同類型的訪問/表)。不需要自引用或硬編碼。您也可以使一個抽象類Visit保持這種幹:

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 

現在,您可以找到Visit並基於SamplePatient,還有SamplePatient基礎上,Visit。您還可以跟蹤每個Patient的各種Visit類型。如果您不想在代碼中將這些類型硬編碼爲枚舉,則可以將其作爲文本字段存儲在Sample上 - 樣本'type'(wince,嘗試使用更準確的另一個術語)您可以製作一張表來保存您的樣本類型,並將Sample屬於SampleType

+0

謝謝,我會給它一個鏡頭 – hook38 2014-09-02 03:58:42

+0

我只是想知道我怎麼能在視圖頁面中創建/更新它?以及如何定義樣本類型?你能給我一些示例代碼,謝謝 – hook38 2014-09-02 05:25:15

+0

順便說一下,我使用simple_form – hook38 2014-09-02 05:45:10