使用Ruby on Rails仅使用少量属性来操作ActiveRecords

时间:2010-10-22 13:49:28

标签: ruby-on-rails ruby activerecord memcached

对于缓存问题,我正在缓存我需要的对象的一系列属性:

friends = [{:id => 4, :name => "Kevin"}, {:id => 12, :name => "Martin"}, …]

是否可以拥有使用此数组的用户列表,以便我可以使用Ruby方法?例如,我通常会得到一个非朋友列表:

non_friends = User.all - current_user.friends

这里,current_user.friends将被缓存的数组替换,只有缓存的属性:

friends = [
    #<User id: 4, name: "Kevin", created_at: nil, updated_at: nil, email: nil>,
    #<User id: 12, name: "Martin", created_at: nil, updated_at: nil, email: nil>,
    …
]

有可能吗?这是缓存的好方法吗? (一个很大的ActiveRecords列表不适合1MB Memcache块。)

谢谢,

凯文

编辑这背后的想法是使用我的应用程序大量使用的2000 ActiveRecords的排序/处理列表,但由于它不适合Memcache块,我正在尝试仅将有趣的属性缓存为数组。现在,我怎么能像使用ActiveRecord数组一样使用这个数组?

1 个答案:

答案 0 :(得分:1)

好吧,你可以只缓存用户ID,然后在你的查找器条件中排除这些ID。在您的示例中,假设您有一个包含ID和名称的friends哈希数组:

friend_ids = friends.map{ |f| f[:id] }
if friend_ids.empty?
  non_friends = User.all
else
  non_friends = User.all(:conditions => ['id NOT IN (?)', current_user.friend_ids])
end