2017-03-03 91 views
0

我想這個場景與模型的多個版本的RailsRails的模型文檔類型

  • 有三種類型ApplicationForms- FORMA,FormB和FormC

的此方案是仿照使用單表繼承。並且每個表格都有一個方法tranform_to_pdf覆蓋,它返回一個地圖(標題 - >值)。

application_forms(id, name, type) 

現在可以有多個版本爲每個表單,例如,FORMA有修訂版1,轉2等。每個版本可能修改字段存在的數量等

會是什麼修改現有鋼軌模型以反映修訂的最佳方法是什麼?

在此先感謝!

+0

'什麼是最好的方式來修改現有的軌道模型,以反映修訂?'堆棧溢出並不像這樣:)「什麼是最好的方式」問題導致基於人們不同意見的答案。堆棧溢出最適合有一個「正確」答案的問題。你如何去解決這個問題呢。不管它是否工作得最好......你可以在你學習(重構)時改進答案。如果您遇到錯誤,請回來,我們將幫助您解決錯誤。 –

回答

0

我會將工作委派給第二組對象。假設您有一個帶有3個字段的forms表(id,多態性typerevision(版本))。我會寫這樣的:

class Form < ActiveRecord::Base 
end 

class FormA < Form 
    def transform_to_pdf 
    end 

    private 

    REVISION_TO_IMPLEMENTATION_MAP = { 
    1 => FormAImplementationV1, 
    2 => FormAImplementationV2 
    } 

    def implementation 
    klass = REVISION_TO_IMPLEMENTATION_MAP[revision] 
    klass.new(self) 
    end 

end 

class FormAImplementation 
    def initialize(model) 
    end 
end 
class FormAImplementationV1 < FormAImplementation 
    def transform_to_pdf 
    end 
end 
class FormAImplementationV2 < FormAImplementation 
    def transform_to_pdf 
    end 
end 

不過,我認爲這可能很快變得難以處理,它會迅速做出有意義的實施另一種解決方案,無論是與元數據或存儲修訂和領域在數據庫中。我需要看到更多的代碼,雖然...