我们正在使用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类缓存的问题,但我很难找到之前看到的地方。
有没有一种已知方法可以解决此问题?
答案 0 :(得分:0)
而不是self.options
,而是使用实例变量来存储哈希并从中返回。
def method_missing(method, *args)
return @serialized_hash[method] if @serialized_hash.include?(method)
super
end
缓存类不是ActiveRecord,它是Rails。它在生产环境中这样做。在开发过程中,它会在每个请求中重新加载模型,从而覆盖您在先前请求中所做的任何运行时修改。