2011-03-14 73 views
0

我们使用method_missing来加载序列化哈希中的属性。例如,假设一个模型:Rails method_missing和activerecord类缓存

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

和一个精简版我们method_missing(它一些其他的东西来检查该选项是允许的,如果没有找到该选项调用过程中的超):

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

则属性是使用model.custom_field

在开发环境中得到了,这个工程的第一页负载,但任何后续页面加载错误出与“未定义的方法‘custom_field’”。

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

有没有一种已知的方法来解决这个问题?

回答

0

而不是self.options是,使用一个实例变量来存储散列并从中返回。

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

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