[英]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.