1

我有一个User.rb模型,其中包括行:acts_as_taggable运行查询,在每次请求

acts_as_taggable_on :industries, :uxes 

[在“uxes”一词包含属于用户UX的喜好,比如他们是否驳回了一定的帮助框。 ]

我已经注意到如下的查询加载在涉及每个请求的顶部@user

User Load (1.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 354 LIMIT 1 
ActsAsTaggableOn::Tag Load (0.4ms) SELECT `tags`.* FROM `tags` INNER JOIN `taggings` ON `tags`.id = `taggings`.tag_id WHERE ((`taggings`.taggable_id = 354) AND (`taggings`.taggable_type = 'User')) AND (taggings.context = 'uxes' AND taggings.tagger_id IS NULL) 
AREL (0.3ms) UPDATE `users` SET `last_request_at` = '2012-09-17 09:44:24', `perishable_token` = 'un5eK7SHDNzTegt7GPUk', `updated_at` = '2012-09-17 09:44:24' WHERE `users`.`id` = 354 
ActsAsTaggableOn::Tag Load (0.3ms) SELECT `tags`.* FROM `tags` INNER JOIN `taggings` ON `tags`.id = `taggings`.tag_id WHERE ((`taggings`.taggable_id = 354) AND (`taggings`.taggable_type = 'User')) AND (taggings.context = 'uxes' AND taggings.tagger_id IS NULL) 
ActsAsTaggableOn::Tagging Load (0.4ms) SELECT `taggings`.* FROM `taggings` WHERE `taggings`.`tagger_type` IS NULL AND `taggings`.`tagger_id` IS NULL AND `taggings`.`context` = 'uxes' AND `taggings`.`tag_id` IN (NULL) AND (`taggings`.taggable_id = 354 AND `taggings`.taggable_type = 'User') 

这些查询都是将时间加载到用户加载的每个页面加载(即,所有页面载入量的90%)。为什么acts_as_taggable强制执行这些查询,除非必要,我怎样才能阻止它加载它们?

回答

2

ActsAsTaggableOn宝石涉嫌支持caching your tag lists直接 在您的模型,也请参阅此question。要为标记列表启用缓存,只需将cached_tag_list列添加到表中,因为缓存方法在acts_as_taggable记录表中寻找名为“cached _#{context} _list” 的列。不知道这是否有效。