5

en primer lugar, estoy usando rails 3.1.3 y carrierwave desde la rama maestra del repositorio github.carrierwave: mount uploader en el atributo dinámico serializado

yo uso un gancho after_init para determinar los campos en base a un atributo de la página instancia de modelo y definir descriptores de acceso de atributo para estos campos que almacenan los valores de un hash serializado (espero que sea claro lo que soy hablando). aquí es una versión simplificada de lo que estoy haciendo:

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 

dejando de lado el comando mount_uploader me da acceso al atributo como yo quiero. pero cuando instalo el cargador de un un mensaje de error diciendo 'método no definido para la clase nueva nil'

que he leído en la fuente que hay los métodos read_uploader y write_uploader en el módulo de extensiones. cómo tengo que sobrescribir estos para hacer que el comando mount_uploader funcione con mi atributo 'virtual'.

Espero que alguien tenga una idea de cómo puedo resolver este problema. muchas gracias por su ayuda.

mejor consideración. Dominik.

+0

Esta es una pregunta muy localizada, por lo que puede que tenga más suerte preguntándole al grupo de CarrierWave: http://groups.google.com/group/carrierwave – iwasrobbed

+0

gracias por la respuesta, pero ya lo intenté. sin respuesta tristemente. es por eso que vine aquí. – domtra

Respuesta

6

Mismo problema, pero resuelto en su modelo, debe anular read_uploader(column) y write_uploader(column, identifier) métodos de instancia. También tengo un problema con #{column}_will_change! y #{column}_changed? para una columna virtual para que tuviera que definir a ellos también:

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 
Cuestiones relacionadas