假设我的模型CustomMetric
(EAV类型)具有String类型的字段label,value,data_type
,而data_type可以是以下字符串之一
"Text","Decimal","Percentage","Range","Date","Image","Document"
现在我想先检查data_type是否为Image,然后再安装上传器。
like =>
class CustomMetric < ActiveRecord::Base
mount_uploader :value, ImageUploader, if: :is_image_type?
def is_image_type?
self.data_type == "Image"
end
end
但是上面的代码不起作用。它在没有检查条件的情况下安装值。
有没有办法做到这一点。有没有可能与carrierwave ..?还有其他选择吗?
答案 0 :(得分:2)
上面的用例可以用单表继承解决,而CarrierWave v1.1.0仍然没有条件挂载。但...
请注意,mount_uploader
在课程中首先includes a module,然后overrides原始value=
来调用所包含的方法value=
defined模块。因此,解决方法只是在调用mount_uploader
后重新定义访问者:
class CustomMetric < ActiveRecord::Base
mount_uploader :value, ImageUploader
def value=(arg)
if is_image_type?
super
else
write_attribute(:value, arg)
end
end
def value
# some logic here
end
def is_image_type?
self.data_type == "Image"
end
end