首先,我正在使用rails 3.1.3和来自master的carrierwave github回购的分支。
我使用after_init钩子来确定基于属性的字段 页面模型实例并定义这些字段的属性访问器 它将值存储在序列化哈希中(希望它清楚我是什么 谈论)。这是我正在做的精简版:
class Page < ActiveRecord::Base
serialize :fields, Hash
after_initialize :set_accessors
def set_accessors
case self.template
when 'standard'
class << self
define_method 'image' do
self.fields['image']
end
define_method 'image=' do |value|
self.fields['image'] = value
end
end
mount_uploader :image, PageImageUploader
end
end
end
end
省略mount_uploader命令可以访问 属性,因为我想要。但是当我挂载上传器时出错 消息说'未定义的方法新为nil类'
我在源代码中读到有read_uploader和方法 扩展模块中的write_uploader。 我如何重写这些来制作mount_uploader命令 使用我的'虚拟'属性。
我希望有人知道如何解决这个问题。非常感谢 您的帮助。
最好的关注。多米尼克。答案 0 :(得分:6)
同样的问题,但在您的模型中解决,您应该覆盖read_uploader(column)
和write_uploader(column, identifier)
实例方法。对于虚拟列,我也遇到#{column}_will_change!
和#{column}_changed?
的问题,所以我也必须定义它们:
class A < ActiveRecord::Base
serialize :meta, Hash
mount_uploader :image, ImageUploader
def image_will_change!
meta_will_change!
@image_changed = true
end
def image_changed?
@image_changed
end
def write_uploader(column, identifier)
self.meta[column.to_s] = identifier
end
def read_uploader(column)
self.meta[column.to_s]
end
end
答案 1 :(得分:3)
现在还有一个载波的附加组件,它提供了Antiarchitect所描述的确切功能: