繁体   English   中英

Rails method_missing和activerecord类缓存

[英]Rails method_missing and activerecord class caching

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

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

以及我们的method_missing的精简版本(它method_missing做一些其他事情来检查是否允许该选项,如果找不到该选项,则当然调用super):

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

然后使用model.custom_field属性

在开发环境中,这适用于第一次页面加载,但随后的任何页面加载错误都可以通过“ undefined method'custom_field'”来解决。

我想我已经读到这是activerecord类缓存的问题,但是我很难找到以前看到的地方。

有已知的方法可以解决此问题吗?

代替任何self.options ,使用实例变量来存储哈希并从哈希返回。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM