2014-06-17 63 views
1

我有一個應用程序使用becomes方法將對象轉換爲另一個對象。編碼資產應該變爲EncodedImage,但它沒有正確保存並且EncodedImage陣列保持空白。雖然看起來好像是保存它,但實際上並沒有將這些數據存儲在EncodedImage對象中。 我有以下代碼:Rails 4「成爲」問題

class EncodedAsset < Asset 
    serialize :files 
    serialize :linked_files 
    serialize :linked_files_cache 

    belongs_to :video, :foreign_key => :asset_id 

    scope :ordered, -> { order("extname ASC, bitrate ASC") } 
    scope :mp4s, -> { where(:extname => '.mp4')} 
    scope :m3u8s, -> { where(:extname => '.m3u8')} 

    validates_presence_of :asset_id 

    before_create :set_type 

    def get_url(file) 
    Saas::Config.primary_s3_bucket_url + file 
    end 

    protected 
    def set_type 
     case profile_name 
     when 'thumbnail' 
     self.becomes(EncodedImage) 
     else 
     self.becomes(EncodedVideo) 
     end 
    end 

    def is_hls? 
     extname.include?('.m3u8') 
    end 
end 

的EncodedAsset類型保持EncodedAsset時一旦縮略圖上傳它應該成爲EncodedImage。

我在做什麼錯?

+2

self.becomes(EncodedImage)應該返回EncodedImage的一個實例和當前的EncodedAsset的屬性......我不認爲它實際上會將當前的EncodedAsset變成一個EncodedImage ......我真的不用,所以我不清楚它的用法 – user3334690

+0

你不能像對待你想的那樣在對象類中進行變異。你只能根據這個返回一個不同的對象。 –

回答

-1
+0

'成爲!'不會解決這個問題。在這種情況下,'!'這個例子表示它也處理'type'屬性,而不是它改變對象。 –

+0

引用文檔變成!:注意:舊實例的sti列值也將被更改,因爲兩個對象共享相同的一組屬性。 – universa1

+0

是的,類型列將被改變,但對象的實際類不會。 –