carrierwave: смонтируйте загрузчик на сериализованном динамическом атрибуте

прежде всего, я использую rails 3.1.3 и 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 дает мне доступ к атрибут, как я хочу. но когда я устанавливаю загрузчик, появляется сообщение об ошибке сообщение о том, что 'undefined method new for nil class'

Я прочитал в источнике, что есть методы read_uploader и write_uploader в модуле расширений. как мне переопределить их, чтобы сделать команду mount_uploader работать с моим «виртуальным» атрибутом.

Надеюсь, у кого-то есть идея, как я могу решить эту проблему. большое спасибо за помощь.

С уважением. Доминик.

5
задан iwasrobbed 26 January 2012 в 16:23
поделиться