小编dom*_*tra的帖子

carrierwave:在序列化动态属性上安装上传器

首先,我使用的是来自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

5
推荐指数
1
解决办法
3492
查看次数