【发布时间】:2014-06-17 16:49:58
【问题描述】:
我有一个应用程序正在使用becomes 方法将一个对象转换为另一个对象。编码资产应该变成EncodedImage,但它没有正确保存,EncodedImage 数组保持空白。虽然它看起来好像正在保存,但实际上并没有将数据存储在 EncodedImage 对象中。
我有以下代码:
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 类型应变为 EncodedImage 时,EncodedAsset 类型仍保持为 EncodedAsset。
我做错了什么?
【问题讨论】:
-
self.becomes(EncodedImage) 应该返回具有当前 EncodedAsset 属性的 EncodedImage 实例...我认为它实际上不会将当前 EncodedAsset 转换为 EncodedImage...我不t 真正使用变得虽然,所以我对它的使用不是很清楚
-
您不能按照自己的意愿就地改变对象类。您将只能基于此返回一个不同的对象。
标签: ruby-on-rails ruby-on-rails-4 assets