2011-03-14 65 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。它在生產環境中這樣做。在開發過程中,它會根據每個請求重新加載模型,從而覆蓋您在之前請求中所做的任何運行時修改。