首先,我使用的是来自github repo主分支的rails 3.1.3和carrierwave.
我使用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
Run Code Online (Sandbox Code Playgroud)
省略mount_uploader命令可以让我访问我想要的属性.但是,当我挂载上传器时,会收到一条错误消息,提示"未定义的方法是新的nil类"
我在源代码中读到扩展模块中有read_uploader和write_uploader方法.我如何重写这些以使mount_uploader命令与我的'virtual'属性一起工作.
我希望有人知道如何解决这个问题.非常感谢你的帮助.
最良好的问候.多米尼克.
ruby metaprogramming ruby-on-rails carrierwave ruby-on-rails-3.1