2012-01-23 65 views
3

當我在模型中添加attr_accessor而沒有數據庫中的列時,我可以將臨時數據添加到類對象數組中。具有attr_accessor的緩存模型數組?

我的例子:

class User < ActiveRecord::Base 
    attr_accessor :score 
end 

問題不過是,如果緩存在內存緩存與分數用戶的數組,數組雲從:

[<User>, <User>, <User>] 

到:

[<User>, :@score, 100, <User>, :@score, 200, <User>, :@score, 300] 

有什麼辦法可以在不破壞數組的情況下緩存這些信息?

編輯:按照要求,這使在緩存中的數據的實際代碼:

def users_scoreboard 
    Rails.cache.fetch("special_scoreboard_#{self.cache_key}", :expires_in => 1.hour) do 
     users = Photo.missions(self.missions).created(self.start_at, self.end_at).map(&:user).uniq! 
     users = [] if users.nil? 
     users.each do |u| 
     u.score = u.score_for_special(self) 
     end 
     users.sort! { |a,b| b.score <=> a.score } 
    end 
    end 

編輯:我使用的是什麼:

ruby -v 
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.1] 

rails -v 
Rails 3.2.0 

memcached -i 
memcached 1.4.5 

memcached -i 
memcached 1.4.5 

gem -v dalli 
1.8.8 

但問題出現或者與內存緩存或與文件存儲。

感謝您的幫助!

+1

向我們展示將數組放入memcache的代碼。 –

+0

我剛剛更新了這個問題:) – rnaud

+0

我無法重現那個。我在rails 3.2上,memcache-client 1.8.5,memcached 1.4.7和'users_scoreboard'總是爲我返回一個'Users'數組。 –

回答

0

嘗試使用cattr_accessor,它也會將訪問器方法添加到類中。這對我有效。