5

首先,我使用的鐵軌3.1.3和carrierwave從GitHub庫的主 分支序列化的動態屬性安裝上傳。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 

離開了mount_uploader命令讓我進入 屬性,因爲我想要的。但是當我安裝上傳者得到一個錯誤 消息說

我在源讀「新的零級未定義的方法」有方法read_uploader和 write_uploader擴展模塊中。 我如何重寫這些以使mount_uploader命令 與我的'虛擬'屬性一起工作。

我希望有人有一個想法如何,我可以解決這個問題。非常感謝 的幫助。

最好的方面。多米尼克。

+0

這是一個相當本地化的問題,所以你可能有更好的運氣詢問CarrierWave組:http://groups.google.com/group/carrierwave – iwasrobbed

+0

謝謝你的回覆,但我已經嘗試過了。可悲的是沒有回答。這就是我來到這裏的原因。 – domtra

回答

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