我正在尝试使用Rails Concerns(甚至是一个裸模块mixin)来分享我的一些模型中的方法。
鉴于一个简单的模型,我将一些编码数据存储在其中一个中 字段:
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
如果我在关注中更改对self :: ENCODED的引用,我会收到错误: #不是类/模块
我甚至尝试在关注register_fields
上创建一个方法,然后我可以从模型中调用,但模型只会抛出一个未知的方法错误。
这里没有想法并寻求帮助。
答案 0 :(得分:0)
事实证明,访问类常量的方法是:
self.class::ENCODED