【问题标题】:acts_as_taggable runs queries on every requestact_as_taggable 对每个请求运行查询
【发布时间】:2012-09-18 08:25:18
【问题描述】:

我有一个包含以下行的 User.rb 模型:

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 会强制执行这些查询,除非必要,否则我如何阻止它加载它们?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 acts-as-taggable-on acts-as-taggable


    【解决方案1】:

    据称ActsAsTaggableOn gem 直接支持caching your tag lists 在您的模型中,另请参阅question。要为标签列表启用缓存,只需将cached_tag_list 列添加到表中,因为缓存方法会查找名为“cached_#{context}_list”的列 在acts_as_taggable 记录表上。不过,不确定这是否有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2021-12-08
      • 2023-02-01
      • 2020-12-12
      相关资源
      最近更新 更多