2015-02-24 35 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