2010-12-20 75 views
3

我正在開發一個項目,其中我可能有兩種資產的實體:圖片視頻,基本上。Rails STI條件分類從基類

因爲我希望所有的資產在同一個表,並同時具有圖片視頻從降了要麼圖片單個上傳表單影片,我使用單表繼承資產類。另外,根據是視頻還是圖片,我將運行不同的驗證/回調。

我用回形針處理上傳過程中,我的想法是上傳文件,並創建一個與它的資產時,應用程序將實例化正確的子類(圖片視頻)根據上傳文件的MIME類型。

這是我的課的草圖:

class Project < ActiveRecord::Base 
    has_many :assets 
    accepts_nested_attributes_for :assets 
end 

class Asset < ActiveRecord::Base 
    belongs_to :project 
    has_uploaded_file :content, ... 
end 

class Picture < Asset 
    validate :image_size 
    ... 
end 

class Video < Asset 
    after_save :convert_format 
    ... 
end 

我的想法是,以實現對資產before_save回調並嘗試實例正確的類存在,但我不知道如何這樣做,或者如果這是一個好主意。

對此有何想法?

回答

1

雖然你應該喜歡脂肪模型和皮包骨頭的控制器,但對我來說這似乎更好地放置在控制器中。我的主要原理是通過在您的Asset模型中執行此操作,您將基本類型與其子類型耦合,這對我來說並不合適(儘管我看到API始終都在這樣做)。

+1

我會接受這個答案,因爲它接近我最終做的,並指出我在正確的方向:我放棄了嵌套建模功能,並選擇手動保存嵌套模型。創建正確子類的「工廠」邏輯確實在Project控制器中,但它可以很容易地移植到它的模型中,只要我完成其他重要工作,我就會盡快完成。描述解決方案的簡化片段可在http://pastie.org/1522024上找到。 – punnie 2011-02-02 16:36:36