2014-06-17 34 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

是的,类型列将被改变,但对象的实际类不会。 –