如何在Rails 4.2中共享数据?

时间:2015-02-24 15:14:56

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

我正在尝试使用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上创建一个方法,然后我可以从模型中调用,但模型只会抛出一个未知的方法错误。

这里没有想法并寻求帮助。

1 个答案:

答案 0 :(得分:0)

事实证明,访问类常量的方法是:

self.class::ENCODED