Rails method_missing和activerecord类缓存

时间:2011-03-14 16:23:26

标签: ruby-on-rails activerecord

我们正在使用method_missing从序列化哈希加载属性。例如,给定一个模型:

model = { :name => 'name',
          :options => { :title => 'title',
                        :custom_field => 'field1',
                        :custom_field => 'field2' } }

以及我们的method_missing的精简版本(它还会执行其他一些操作以检查该选项是否允许,如果找不到该选项,则会调用super):

def method_missing(method, *args)
  self.options[method]
end

然后使用model.custom_field

获取该属性

在开发环境中,这适用于第一页加载,但任何后续页面加载错误都带有“未定义方法'custom_field'”。

我认为我已经读过这是一个activerecord类缓存的问题,但我很难找到之前看到的地方。

有没有一种已知方法可以解决此问题?

1 个答案:

答案 0 :(得分:0)

而不是self.options,而是使用实例变量来存储哈希并从中返回。

def method_missing(method, *args)
    return @serialized_hash[method] if @serialized_hash.include?(method)
    super
end

缓存类不是ActiveRecord,它是Rails。它在生产环境中这样做。在开发过程中,它会在每个请求中重新加载模型,从而覆盖您在先前请求中所做的任何运行时修改。