2015-02-24 34 views
0

我正在嘗試使用Rails關注(甚至是一個裸模塊mixin)來跨我的一些模型共享方法。如何在Rails 4.2中分享數據與擔憂?

給出一個簡單的模型,我存儲一些編碼數據在 領域之一:

class DataElement < ActiveRecord::Base 
    include EmbeddedData 

    ENCODED = %w(aliases) 
end 

我再發與管理數據的方法,需要關注的問題:

module EmbeddedData 
    extend ActiveSupport::Concern 

    included do 
     after_find :decode_fields 
     before_save :encode_fields 

     @decoded = {} 
    end 

    def decoded(key, value = false) 
     @decoded[key][:value] if @decoded.has_key? key 
    end 


    def decode_fields 
     @decoded = {} if @decoded.nil? 
     ENCODED.each do |field| 
      if attributes[field] 
       @decoded[field] = { 
        value: JSON.parse(attributes[field]), 
        dirty: false 
       } 
      end 
     end 
    end 

    def encode_fields 
     ENCODED.each do |field| 
      if decoded[field] && decoded[field][:dirty] 
       attributes[field] = @decoded[field][:value].to_json 
      end 
     end 
    end 
end 

鑑於此設置中,我得到的錯誤uninitialized constant EmbeddedData::ENCODED

如果我改變參考自我::在關注編碼我得到的錯誤: #是不是一個類/模塊

我甚至嘗試過關注register_fields,然後我可以從模型調用,但模型只是拋出未知的方法錯誤的方法。

在這裏用盡想法並尋求幫助。

回答

0

因此,原來訪問類常數的方法是:

self.class::ENCODED