Манипулирование ActiveRecords с использованием только нескольких атрибутов с помощью Ruby on Rails - PullRequest
0 голосов
/ 22 октября 2010

Для кеширования я кеширую массив атрибутов нужных мне объектов:

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 не вписывается в блок памяти Memcache размером 1 МБ.)

Спасибо,

Кевин

edit: Идея, лежащая в основеэто использование отсортированного / обработанного списка 2000 ActiveRecords, вокруг которого интенсивно используется мое приложение, но, поскольку оно не помещается в блок Memcache, я пытаюсь кэшировать интересные атрибуты только в виде массива.Теперь, как я могу использовать этот массив, как если бы это был массив ActiveRecord?

1 Ответ

1 голос
/ 22 октября 2010

Ну, вы можете просто кэшировать идентификаторы пользователей, а затем исключить эти идентификаторы в ваших условиях поиска. В вашем примере, если у вас есть массив 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...